- 公司转 React Native 开发,从开始接触到现在也一个多月了,给我的感觉,RN 的确非常叼,JSX、ES6,前端人员比较容易上手,但是现在还不能做到真正的一套代码适用 iOS 和 Android 两端。
- 前端我是半路出家,RN 的 ES6 语法还不是很熟练,碰到 RN、Native 互相调用时,写的很难受,个人还是比较喜欢 Objective-C。
- 现在 RN 也才到 0.38,如果出 1.0 的话,我还是很愿意花大时间学习学习的。在这里谈一谈我自己的看法,并将开发中遇到的一些问题记录下来。
优点:
1、写 UI 快,跟写 HTML 差不多,flex 布局写起来很爽,而且跨平台;
2、调试方便,command + R 直接刷新 Simulator,不用像 Xcode 等待编译;
3、体验好于 Hybrid App,接近 Native App;
4、热更新
缺点:
1、很多不支持,像支付、分享等还没有对应的 RN 方案,需要分别调用 iOS、Android;
2、iOS、Android 部分组件中还存在差异,坑需要慢慢探索;
3、Android 中开启调试模式卡到爆
1、<TextInput> iOS 中正常,Android 中会自带一条下划线,需要加一句
underlineColorAndroid="transparent"
2、<Text> 需要设置高度,iOS 中不设置会自适应展示,Android 中不设置显示不全
3、lineHeight 在 Android 中不能设置为小数。要想一套代码适应 iOS 和 Android 的话,可以这样写:
flexDirection: 'row',
alignItems: 'center',
justifyContent: 'center',
4、zIndex 在 Android 中无效,后渲染的组件在上面。
5、没有 js 中的 show/hide 方法,需要根据属性判断是否渲染,比如:
{
this.state.username && this.state.password ? (
// 存在 username 和 password 时
<View style={styles.login}>
<Text style={styles.loginText}>已登陆</Text>
</View>
) : (
<TouchableOpacity style={styles.login} onPress={this._onPressLoginButton.bind(this)}>
<View>
<Text style={styles.loginText}>登陆</Text>
</View>
</TouchableOpacity>
)
}
6、<ListView> 通过网络获取数据的 ListView 不能直接渲染,因为渲染时数据还没回来,RN 会因空数据报红
{
this.state.data != null ? (
<ListView style={styles.listView}
dataSource={this.data}
renderRow={this.renderRow.bind(this)}/>
) : (
null
)
}
7、RN、OC 交互,callback 不能多于一个,否则 RN 会崩溃
上个项目涉及到定位,我在 OC 里写好定位方法,RN 中获取回调,有时突然崩溃,有时还没问题,当时卡了我一个下午😂 。后来想起 iOS 中定位有时会因失败定位第二次或者第三次,导致了出现第二个、第三个 callback,崩溃。
网友评论