React Native 项目目录解析人生没有对错,只有选择后的坚持,不后悔,走下去,就是对的。
上一节我们简单的新建了一个React Native的项目AwsoneProject,我们什么都没有操作,就直接在模拟器上运行起来了。这里我们详细的看看,React Native给我们生成的这几个文件到底是做什么用的。
文件建构如下图所示:
mReactInstanceManager = ReactInstanceManager.builder()
.setApplication(getApplication())
.setBundleAssetName("index.android.bundle")
// 设置模块的主入口为index.android
.setJSMainModuleName("index.android")
.addPackage(new MainReactPackage())
.setUseDeveloperSupport(BuildConfig.DEBUG)
.setInitialLifecycleState(LifecycleState.RESUMED)
.build();
其内容遵循的是react 规则
/** * Sample React Native App * https://github.com/facebook/react-native */
'use strict';
// 声明一个react native项目需要包含的几个依赖库
var React = require('react-native');
var {
AppRegistry,
StyleSheet,
Text,
View,
} = React;
// 整个Project的入口
var AwesomeProject = React.createClass({
// 渲染的方式,和渲染的内容,类似布局文件
render: function() {
return (
<View style={styles.container}>
<Text style={styles.welcome}>
Welcome to React Native!
</Text>
<Text style={styles.instructions}>
To get started, edit index.android.js
</Text>
<Text style={styles.instructions}>
Shake or press menu button for dev menu
</Text>
</View>
);
}
});
// 布局类型的样式,并不是继承于css只是包含FlexBox的属性而已,使用时候注意文档
var styles = StyleSheet.create({
container: {
flex: 1,
justifyContent: 'center',
alignItems: 'center',
backgroundColor: '#F5FCFF',
},
welcome: {
fontSize: 20,
textAlign: 'center',
margin: 10,
},
instructions: {
textAlign: 'center',
color: '#333333',
marginBottom: 5,
},
});
// 注册整个app的主入口
AppRegistry.registerComponent('AwesomeProject', () => AwesomeProject);
/** * Sample React Native App * https://github.com/facebook/react-native */
'use strict';
var React = require('react-native');
var {
AppRegistry,
StyleSheet,
Text,
View,
} = React;
var AwesomeProject = React.createClass({
render: function() {
return (
<View style={styles.container}>
<Text style={styles.welcome}>
Welcome to React Native!
</Text>
<Text style={styles.instructions}>
To get started, edit index.ios.js
</Text>
<Text style={styles.instructions}>
Press Cmd+R to reload,{'\n'}
Cmd+D or shake for dev menu
</Text>
</View>
);
}
});
var styles = StyleSheet.create({
container: {
flex: 1,
justifyContent: 'center',
alignItems: 'center',
backgroundColor: '#F5FCFF',
},
welcome: {
fontSize: 20,
textAlign: 'center',
margin: 10,
},
instructions: {
textAlign: 'center',
color: '#333333',
marginBottom: 5,
},
});
AppRegistry.registerComponent('AwesomeProject', () => AwesomeProject);
{
"name": "AwesomeProject",
"version": "0.0.1",
"private": true,
"scripts": { "start": "node_modules/react-native/packager/packager.sh" },
"dependencies": { "react-native": "^0.12.0" } }
Ok 这里我们自己尝试写一个Hello World的项目程序。这里我们根据生成的index.android.js进行修改。
/** * Sample React Native App * https://github.com/facebook/react-native */
'use strict';
var React = require('react-native');
var {
AppRegistry,
StyleSheet,
Text,
View,
} = React;
var AwesomeProject = React.createClass({
render: function() {
return (
// 放置一个 sytle为myFont的Text 。内容为Hello World
<Text style={[styles.myFont]} >
Hello World!
</Text> ); } }); // 定义 myFont样式 的字体大小为100 var styles = StyleSheet.create({ myFont: { fontSize:100, } }); AppRegistry.registerComponent('AwesomeProject', () => AwesomeProject);
有过JavaScript基础的同学一看应该就能够看懂了,虽然本程序没有使用到css,但是语法与格式都与css极为类似,可以是使其的子集。
而render的布局样式有极为类似Android中的layout文件编写模式。相信大家简单的联系也能够很快的入手。
值得一提的是,一问我们的整个项目都是使用js来进行书写的,所以我们的所有的项目在调试的时候都不需要重新编译。
直接点击Reload js既可以了,这个也就是为什么后面说React Native能够完成在线的Hotpatch功能,如下图所示:
当然没有报错的话,官方说模拟器可以按下F2键也能够reload js,Genymotion下用 ⌘-M。我没有成功过。
还是老实的再运行一遍吧。
/*
* @author zhoushengtao(周圣韬)
* @since 2015年10月11日 凌晨 1:34:20
* @weixin stchou_zst
* @blog http://blog.csdn.net/yzzst
* @交流学习QQ群:341989536
* @私人QQ:445914891
/