RN命令
npm cache clean --force
react-native init AwesomeProject
cd AwesomeProject
react-native run-android
react-native start --port 9999//在新端口启动服务
React Native 框架
生命周期 http://www.race604.com/react-native-component-lifecycle/
方法名 | 作用 | 调用次数 |
constructor | 构造函数,初始化需要的state | 1次 |
componentWillMount | 控件渲染前触发 | 1次 |
render | 渲染控件的方法 | 多次 |
componentDidMount | 控件渲染后触发 | 1次 |
componentWillReceiveProps | 组件接收到新的props时被调用 | 多次 |
shouldComponentUpdate | 当组件接收到新的props和state时被调用 | 多次 |
componentWillUpdate | props或者state改变,并且此前的shouldComponentUpdate方法返回为 true会调用该方法 | 多次 |
componentDidUpdate | 组件重新渲染完成后会调用此方法 | 多次 |
componentWillUnmount | 组件卸载和销毁之前被调用 | 1次 |
渲染
依次触发了父控件的构造函数,componentwillMount,render,子控件的构造函数,子控件的componentwillMount,render,componentwillMount,最后才是父控件的componentwillMount
可以看出,初次的渲染周期是从外向内逐步渲染,内部完成后才算整体结束。
动画原理
https://blog.csdn.net/sinat_17775997/article/details/60955900
布局
position:'relative'
相对布局。这个和html的position有很大的不同,他的相对布局不是相对于父容器,而是相对于兄弟节点。
relative:生成相对定位的元素,相对于其正常位置进行定位。因此,"left:20" 会向元素的 LEFT 位置添加 20 像素。
position:'absolute'
绝对布局。这个是相对于父容器进行据对布局。绝对布局是脱离文档流的,不过奇怪的是依旧在文档层次结构里面,这个和html的position也很大不一样。另外还有一个和html不一样的是,html中position:absolute要求父容器的position必须是absolute或者relative,如果第一层父容器position不是absolute或者relative,在html会依次向上递归查询直到找到为止,然后居于找到的父容器绝对定位。
Image——resize mode
JS—use strict
严格模式下你不能使用未声明的变量。
"use strict";
x = 3.14; // 报错 (x 未定义)
在函数内部声明是局部作用域 (只在函数内使用严格模式):
x = 3.14; // 不报错
myFunction();
function myFunction() {
"use strict";
y = 3.14; // 报错 (y 未定义)
}
不允许删除变量
箭头函数,在点击事件里,没有参数可以直接onPress={this.playGame},有参数就要onPress={()=>(this.playGame(a,b))}
需要继承的方法不能写成箭头函数。
1、数据只有一份存储,即在C++中,无论是ReadableNativeArray(Java)还是WritableNativeArray(Java)都只是数据存取的管道。
2、ReadableNativeArray和WritableNativeArray在Java层和C++层又都有各自的实例,通过Java层实例的HybridData的mNativePointer作为纽带链接,其存储的是C++层实例的指针。
3、无论是Java层还是C++层的ReadableNativeArray和WritableNativeArray都是统一由Java GC进行回收管理。
本地H5跟APP联调配置
1.电脑和APP在同一网段
2.电脑本地服务的配置地址webpack.dev.js里的target和 APP里config.gradle的WEB_HOST一致(都是dev或sit)
3.修改APP里的H5 URL,栗子:http://10.202.72.12:8080/cotpweb-web/pages/app/index.html#/auth/knowledge-wrapper/22634/1
4.替换token .\html\app\src\js\utils.js getCokie()的返回值为,APP的token
5.如果需要在H5页面打断点,需要用到Chrome://inspect (如果白屏,可能需要梯子才能看到待调试的页面)
6.开启webView调试的方法,开启之后,才能在Chrome里调试,
@Override
protected void onCreate(Bundle savedInstanceState) {
//Enabling web debugging
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
if (0 != (getApplicationInfo().flags = ApplicationInfo.FLAG_DEBUGGABLE)) {
WebView.setWebContentsDebuggingEnabled(true);
}
}
super.onCreate(savedInstanceState);
}
注意:chrome浏览器,不允许读取本地服务网页的cookie