美文网首页
React Native 填坑记

React Native 填坑记

作者: 哎呀我Qu | 来源:发表于2017-01-30 14:25 被阅读813次
  • 公司转 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,崩溃。

相关文章

网友评论

      本文标题:React Native 填坑记

      本文链接:https://www.haomeiwen.com/subject/hhhhittx.html