如何新建react-native項(xiàng)目

前言

最近要開始寫一個(gè)新的項(xiàng)目,算是將之前的項(xiàng)目做個(gè)總結(jié)。把有缺陷的地方進(jìn)行修改,沒有引入的組件引入,算是做一個(gè)提煉總結(jié),把之前沒有辦法修改的問題一一修正。

創(chuàng)建項(xiàng)目

我這里使用的是官方提供的react-native-cli

react-native init newProject --version 0.57.0

新項(xiàng)目當(dāng)然是使用最新版本了,react-native從低版本向上升級(jí)真的是痛苦。

創(chuàng)建完新的項(xiàng)目之后當(dāng)然是建立目錄結(jié)構(gòu),目錄結(jié)構(gòu)確實(shí)是對(duì)項(xiàng)目有很大的影響??傊Y(jié)合之前的項(xiàng)目經(jīng)驗(yàn),構(gòu)建了如下的目錄結(jié)構(gòu),當(dāng)然其他的也沒有問題,這里打算使用Mobx,所以將相關(guān)Mobx邏輯代碼直接命名了Mobx文件夾。

new-file-menu.png

可以是很基礎(chǔ)的目錄結(jié)構(gòu),看文件夾名字就可以知道它的功能了。

在正式開始敲代碼前還需要做以下準(zhǔn)備工作。

eslint

eslint是airbnb公司推出的代碼規(guī)范插件,為編寫代碼提供標(biāo)準(zhǔn)

運(yùn)行

(
  export PKG=eslint-config-airbnb;
  npm info "$PKG@latest" peerDependencies --json | command sed 's/[\{\},]//g ; s/: /@/g' | xargs npm install --save-dev "$PKG@latest"

)

還需要安裝babel-eslint

npm install babel-eslint --save-dev

創(chuàng)建.eslintrc文件,可以將你需要的規(guī)則寫在這個(gè)文件當(dāng)中。

之后在package.json中的scripts中添加eslint執(zhí)行命令

"lint": "eslint --ext .js src/"

這個(gè)命令即為檢查src文件夾下所有的js文件,eslint的命令行參數(shù)有很多,具體可以查看eslint配置

執(zhí)行npm run lint即可驗(yàn)證該命令是否已經(jīng)正確配置,如果有任何不符合eslint的規(guī)范的地方會(huì)在命令行中提示。也可以在上述的.eslintrc文件中修改eslint內(nèi)置的規(guī)則,以符合具體的場(chǎng)景需求。

如果希望在src文件夾內(nèi),有些文件跳過這些規(guī)則的檢查,可以在根目錄下創(chuàng)建.eslintignore文件,將路徑寫入其中,eslint就會(huì)自動(dòng)跳過這些文件。

至此eslint的添加、引用以及配置都已經(jīng)設(shè)置完畢,配合使用的編輯器中的插件會(huì)在日常輸入代碼的時(shí)候提示開發(fā)者符合eslint的規(guī)范。但是各個(gè)編譯器的插件功能不同,有時(shí)并不會(huì)很準(zhǔn)確的提示。所以在命令行中執(zhí)行eslint的命令才能的到真正的檢查結(jié)果。

為了避免忘記執(zhí)行該命令,將不規(guī)范的代碼提交到遠(yuǎn)程倉(cāng)庫,我們引入git的hook,它會(huì)在每次commit前調(diào)用配置中的命令,利用這個(gè)hook我們?cè)诿看翁峤磺岸紙?zhí)行一次eslint命令確保每次提交代碼的規(guī)范性。

npm install pre-commit --save-dev

如果你不希望此次提交被檢查,可以使用-n來跳過hook

并在package.json中加入

"pre-commit":[
    "eslint"
]

flow

flow是JavaScript 代碼的靜態(tài)類型檢查工具,它能夠捕獲 JavaScript 代碼中的常見問題,如靜態(tài)類型轉(zhuǎn)換不匹配、空指針引用等問題。同時(shí),F(xiàn)low 還為 JavaScript 新增了類型語法,如類型別名。

安裝

npm install --save-dev flow-bin

創(chuàng)建配置文件。

touch .flowconfig

先不管空白的.flowconfig配置文件。在package.json文件里flow腳本。
your project/package.json

  "scripts": {
    "flow": "flow; test $? -eq 0 -o $? -eq 2",
  },

然后給需要flow檢查的文件里加上//@flow或者/*@flow*/。然后就可以檢查了。(也可以在命令中加上--all, 這樣就會(huì)檢查所有文件)。

在根目錄下運(yùn)行命令:

npm run flow

以上就配置好了flow,下面寫一個(gè)簡(jiǎn)單的小例子來說明flow是如何運(yùn)行的。

const plus = (a: number, b: number) => {
    return a + b;
}

plus(10, 2);

其實(shí)也就是和平常寫法沒什么區(qū)別,只是在定義參數(shù)的時(shí)候要添加該參數(shù)的數(shù)據(jù)類型。如果傳入非法的數(shù)據(jù)類型,flow則會(huì)報(bào)錯(cuò)。flow在多人開發(fā)中還是十分有效果的,如果不想使用typescript,那么js+flow也是不錯(cuò)的選擇。flow當(dāng)然還有很多其他的用法,這里就不一一介紹了。

mobx

上一個(gè)項(xiàng)目中使用的就是mobx,總體來說使用起來十分簡(jiǎn)單。對(duì)于App的流暢性也有很大的提升。

安裝

需要的依賴關(guān)系:mobx和mobx-react

npm i mobx mobx-react --save

我們還需要安裝一個(gè)babel插件,以便我們可以使用ES7裝飾器:

npm i babel-plugin-transform-decorators-legacy --save-dev

現(xiàn)在,讓我們創(chuàng)建一個(gè).babelrc文件來配置我們的插件:

{
  "presets": ["react-native"],
  // 主要這兩句話
  "plugins": ["transform-decorators-legacy"]
}

自RN 0.56版本之后,react-native默認(rèn)支持bable7,之前的寫法都不對(duì)了。

首先,需要安裝下面的4個(gè)babel庫

@babel/core
@babel/plugin-proposal-decorators
@babel/plugin-transform-runtime
@babel/runtime

將.babelrn修改為如下

{
  "presets": ["module:metro-react-native-babel-preset"],
  "plugins": [
    ["@babel/plugin-proposal-decorators", { "legacy": true }],
    ["@babel/transform-runtime", {
      "helpers": true,
      "regenerator": false
    }]
  ]
}

react-navigation

react-navigation 3.x與之前版本有較大區(qū)別

安裝react-navigation

npm install react-navigation --save

在新版本中新增了一個(gè)原生庫react-native-gesture-handler如果沒有安裝,按如下方式安裝

npm install react-native-gesture-handler --save
react-native link react-native-gesture-handler

創(chuàng)建路由

之前使用的是StackNavigator來創(chuàng)建路由,在3.x中使用createStackNavigator并且需要由createAppContainer包裹起來

`react-navigation 1.x`
const Navigator = StackNavigator({
    Home: {screen: Home}
},{
    
});
export default Navigator;

`react-navigation 3.x`
const Navigator = createStackNavigator({
    Home: {screen: Home}
},{
    
});
export default createAppContainer(Navigator);

以上,同理TabNavigator修改為createBottomTabNavigator

總之react-navigation 3.x與之前版本有較大出入,更多詳情請(qǐng)看react-navigation官網(wǎng)

Axios

react-native中自帶了fetch請(qǐng)求API,由于fetch中有很多功能不好實(shí)現(xiàn),就選擇axios做為網(wǎng)絡(luò)請(qǐng)求庫。axios起碼可以設(shè)置請(qǐng)求超時(shí)時(shí)間,fetch的話只能使用promise.race()間接實(shí)現(xiàn)請(qǐng)求超時(shí)的功能。

安裝

npm install axios

使用

axiosfetch在使用起來沒有什么差別

`get請(qǐng)求`
axios.get('/user', {
    params: {
      ID: 12345
    }
  })
  .then(function (response) {
    console.log(response);
  })
  .catch(function (error) {
    console.log(error);
  });

`post請(qǐng)求`
axios.post('/user', {
    firstName: 'Fred',
    lastName: 'Flintstone'
  })
  .then(function (response) {
    console.log(response);
  })
  .catch(function (error) {
    console.log(error);
  });

當(dāng)然axios還有很多配置選項(xiàng),比如請(qǐng)求超時(shí)時(shí)間、設(shè)置請(qǐng)求頭、配置代理、配置相應(yīng)頭等等,這些都可以在axios中文文檔中查看

總結(jié)

新建一個(gè)項(xiàng)目需要多方面的考慮,這里只是寫出我習(xí)慣用到的一些框架。后續(xù)肯定還有別的需求添加,但是大體上都是一些UI方面的功能性的東西,總體的項(xiàng)目框架已經(jīng)搭建好了。這個(gè)也算是之前項(xiàng)目的一個(gè)總結(jié)吧。

以上

參考文獻(xiàn)

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容