如果在學(xué)習(xí)react-native的過程中遇到什么問題做鹰,歡迎加入QQ群397885169一起學(xué)習(xí),一起成長。
識兔已經(jīng)更新到0.57了哦并扇,歡迎star
識兔,一款用來識別圖片的開源項目抡诞,在未來還會添加更多有意思的東西
前言
react-native
在三天前穷蛹,也就是2018.9.12
號更新了0.57.0
版本,這個版本終于正常的兼容了babel7
昼汗,解決了0.56
版本使用mobx
等裝飾器需要各種配置的問題肴熏。
主要更新(合并0.56版本和0.57版本重要的修復(fù))
TextInput
不能輸入中文的問題TextInput.clear()
和TextInput.setNativeProps({text: ''})
不能正常使用的問題更新iOS最低兼容到
iOS9
為
WebView
添加WKWebView
,通過useWebKit={true}
開啟為安卓添加
overflow
為安卓
Image
添加默認(rèn)占位圖defaultSource
顷窒,但是在debug
下是看不到的蛙吏,只有在release
中才能看到安卓現(xiàn)在
TextInput
的underlineColorAndroid
默認(rèn)為透明(終于不用手動更改了)打開
Modal
可以覆蓋狀態(tài)欄層?修復(fù)Modal+ FlatList滾動
導(dǎo)出
FlatList
和SectionList
的動畫,
現(xiàn)在支持Animated
的組件包括了View
鸦做,Text
励烦,Image
,ScrollView
泼诱,FlatList
坛掠,SectionList
。
以上是0.56
和0.57
版本坷檩,我整理的主要更新却音,更詳細(xì)的更新日志,請參考官方日志矢炼。
項目升級
升級
開發(fā)
react-native
經(jīng)常會遇到升級新版本系瓢,官方提供了命令行的升級方式,我管這種叫做升級
句灌,這種方式的好處就是傻瓜式夷陋,執(zhí)行命令行就可以自動升級版本了,但這個方式的缺陷也很明顯胰锌,如果升級中出現(xiàn)問題骗绕,很難排查錯誤。所以资昧,我更推薦第二種方式酬土。
遷移
遷移:顧名思義,搬遷移動格带,流程就是撤缴,新建個項目,把原有項目中的更改叽唱,慢慢搬家屈呕,搬到新的項目中,這樣的壞處很明顯棺亭,很慢虎眨,才做過程中,可能會有遺忘镶摘,但是這樣方式嗽桩,更方便管理,流程出現(xiàn)錯誤凄敢,只要對著原項目更改就可以了碌冶,更可控。
0.57版本遷移教程
未使用裝飾器
如果你的項目中贡未,沒有用到Mobx种樱,這種需要es6裝飾器語法支持的三方庫或者方法,那么恭喜你俊卤,只要你完整的遷移項目就可以了嫩挤,除了YellowBox
會給你造成一點麻煩外,基本不會遇到其他問題的消恍,如果真的遇到問題啦岂昭,歡迎加群,咱們一起討論解決辦法狠怨。
使用裝飾器
如果你的項目使用了裝飾器约啊,那么也要恭喜你,順利的度過了0.56
版本的那個深坑佣赖,在0.57
版本中恰矩,要修改的東西相對于0.56
少了很多。
接下來憎蛤,就說明下操作步驟外傅。
- 首先,需要安裝下面的4個
babel
庫俩檬,因為從0.56
版本開始萎胰,react-native
默認(rèn)支持bable7
,之前的寫法都不對了棚辽。
package.json
@babel/core
@babel/plugin-proposal-decorators
@babel/plugin-transform-runtime
@babel/runtime
其次技竟,要修改
babelrc
文件,更新幾個參數(shù)就好屈藐。.
文件在mac上是默認(rèn)隱藏的榔组,所以,你可能需要打開IDE估盘,不管是webstrom
還是vscode
都可以瓷患。完成下面這步就可以正常的使用裝飾器啦!但是最后一步才是最重要的遣妥!
.babelrc
{
"presets": ["module:metro-react-native-babel-preset"],
"plugins": [
["@babel/plugin-proposal-decorators", { "legacy": true }],
["@babel/transform-runtime", {
"helpers": true,
"regenerator": false
}]
]
}
- 修復(fù)App入口文件擅编,默認(rèn)是
index.js
。這也是個bug箫踩,如果不添加如下代碼爱态,會導(dǎo)致release
包無法正常運行。詳細(xì)信息可以參考這個issues
境钟,解決辦法comment
import applyDecoratedDescriptor from '@babel/runtime/helpers/esm/applyDecoratedDescriptor';
import initializerDefineProperty from '@babel/runtime/helpers/esm/initializerDefineProperty';
Object.assign(babelHelpers, { applyDecoratedDescriptor, initializerDefineProperty });
const App = require('./app/index').default;
AppRegistry.registerComponent(appName, () => App);
小技巧
新版本中锦担,對
YellowBox
做了增強,項目中有各種問題都會暴露出來慨削,可以使用YellowBox.ignoreWarnings(['Require cycle:'])
關(guān)閉一波洞渔。
iOS升級可能遇到的問題
1. 缺少libfishhook.a
文件
error: Build input file cannot be found: '/Users/Rabbit/Desktop/DouXi/node_modules/react-native/Libraries/WebSocket/libfishhook.a'
找不到libfishhook.a
套媚,如果經(jīng)常開發(fā),可能知道要手動添加磁椒,但是手動添加到主目錄是沒用的堤瘤,要參考下兩圖哦!
這里參考了這篇文章
2. 'config.h' file not found
老生常談的問題浆熔,缺少third-party
文件(如果不知道是什么本辐,請點擊該鏈接),但很多人手動添加并且重啟后還是不行医增,這是少執(zhí)行了一個sh
腳本慎皱。
cd node_modules/react-native/third-party/glog-0.3.4
../../scripts/ios-configure-glog.sh
可能有些開發(fā)者的本地glog
版本不是0.3.4
,所以叶骨,這里要對應(yīng)你本地的版本才可以
查看glog本地版本的方法
cd ./rncache
open .
這個問題是XCode10導(dǎo)致的茫多,每次編譯項目都要執(zhí)行上面的代碼太過于麻煩,所以忽刽,可以把上面的代碼寫到package.json
中地梨,如下
...
"scripts": {
"start": "node node_modules/react-native/local-cli/cli.js start",
"build": "cd node_modules/react-native/third-party/glog-0.3.5/ && ../../scripts/ios-configure-glog.sh",
"test": "jest"
},
...
3. 如下圖,缺少@runtime
解決辦法就是安裝下咯缔恳。
yarn add @babel/runtime
或者 npm install @babel/runtime
總結(jié)
0.57
是個很棒的版本宝剖,之后會瘋狂安利,react-native
也在重構(gòu)歉甚,真心希望可以解決現(xiàn)在存在的各種痛點万细。
如果在學(xué)習(xí)react-native的過程中遇到什么問題,歡迎加入QQ群397885169一起學(xué)習(xí)纸泄,一起成長赖钞。
我開源的項目識兔在昨天完成0.57版本的更新,歡迎star哦聘裁!