React Native 填坑记

  • 公司转 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,崩溃。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容