如何新建react-native項目

前言

最近要開始寫一個新的項目害捕,算是將之前的項目做個總結(jié)鹰晨。把有缺陷的地方進(jìn)行修改墨叛,沒有引入的組件引入,算是做一個提煉總結(jié)模蜡,把之前沒有辦法修改的問題一一修正漠趁。

創(chuàng)建項目

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

react-native init newProject --version 0.57.0

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

創(chuàng)建完新的項目之后當(dāng)然是建立目錄結(jié)構(gòu)闯传,目錄結(jié)構(gòu)確實是對項目有很大的影響÷倍剩總之結(jié)合之前的項目經(jīng)驗甥绿,構(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)

運行

(
  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ī)則寫在這個文件當(dāng)中。

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

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

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

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

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

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

為了避免忘記執(zhí)行該命令扰肌,將不規(guī)范的代碼提交到遠(yuǎn)程倉庫,我們引入git的hook熊杨,它會在每次commit前調(diào)用配置中的命令曙旭,利用這個hook我們在每次提交前都執(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)換不匹配郊霎、空指針引用等問題。同時爷绘,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, 這樣就會檢查所有文件)楷扬。

在根目錄下運行命令:

npm run flow

以上就配置好了flow解幽,下面寫一個簡單的小例子來說明flow是如何運行的。

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

plus(10, 2);

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

mobx

上一個項目中使用的就是mobx,總體來說使用起來十分簡單曾雕。對于App的流暢性也有很大的提升奴烙。

安裝

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

npm i mobx mobx-react --save

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

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

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

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

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

首先幅虑,需要安裝下面的4個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

在新版本中新增了一個原生庫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與之前版本有較大出入,更多詳情請看react-navigation官網(wǎng)

Axios

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

安裝

npm install axios

使用

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

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

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

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

總結(jié)

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

以上

參考文獻(xiàn)

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末帖族,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子挡爵,更是在濱河造成了極大的恐慌竖般,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,635評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件茶鹃,死亡現(xiàn)場離奇詭異涣雕,居然都是意外死亡艰亮,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,543評論 3 399
  • 文/潘曉璐 我一進(jìn)店門挣郭,熙熙樓的掌柜王于貴愁眉苦臉地迎上來迄埃,“玉大人,你說我怎么就攤上這事兑障≈斗牵” “怎么了?”我有些...
    開封第一講書人閱讀 168,083評論 0 360
  • 文/不壞的土叔 我叫張陵流译,是天一觀的道長逞怨。 經(jīng)常有香客問我,道長福澡,這世上最難降的妖魔是什么叠赦? 我笑而不...
    開封第一講書人閱讀 59,640評論 1 296
  • 正文 為了忘掉前任,我火速辦了婚禮革砸,結(jié)果婚禮上除秀,老公的妹妹穿的比我還像新娘。我一直安慰自己算利,他們只是感情好册踩,可當(dāng)我...
    茶點故事閱讀 68,640評論 6 397
  • 文/花漫 我一把揭開白布效拭。 她就那樣靜靜地躺著,像睡著了一般允耿。 火紅的嫁衣襯著肌膚如雪借笙。 梳的紋絲不亂的頭發(fā)上较锡,一...
    開封第一講書人閱讀 52,262評論 1 308
  • 那天盗痒,我揣著相機與錄音,去河邊找鬼俯邓。 笑死骡楼,一個胖子當(dāng)著我的面吹牛稽鞭,可吹牛的內(nèi)容都是我干的鸟整。 我是一名探鬼主播,決...
    沈念sama閱讀 40,833評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼朦蕴,長吁一口氣:“原來是場噩夢啊……” “哼篮条!你這毒婦竟也來了弟头?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,736評論 0 276
  • 序言:老撾萬榮一對情侶失蹤涉茧,失蹤者是張志新(化名)和其女友劉穎赴恨,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體伴栓,經(jīng)...
    沈念sama閱讀 46,280評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡伦连,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,369評論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了钳垮。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片惑淳。...
    茶點故事閱讀 40,503評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖扔枫,靈堂內(nèi)的尸體忽然破棺而出汛聚,到底是詐尸還是另有隱情,我是刑警寧澤短荐,帶...
    沈念sama閱讀 36,185評論 5 350
  • 正文 年R本政府宣布倚舀,位于F島的核電站,受9級特大地震影響忍宋,放射性物質(zhì)發(fā)生泄漏痕貌。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,870評論 3 333
  • 文/蒙蒙 一糠排、第九天 我趴在偏房一處隱蔽的房頂上張望舵稠。 院中可真熱鬧,春花似錦入宦、人聲如沸哺徊。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,340評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽落追。三九已至,卻和暖如春涯肩,著一層夾襖步出監(jiān)牢的瞬間轿钠,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,460評論 1 272
  • 我被黑心中介騙來泰國打工病苗, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留疗垛,地道東北人。 一個月前我還...
    沈念sama閱讀 48,909評論 3 376
  • 正文 我出身青樓硫朦,卻偏偏與公主長得像贷腕,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,512評論 2 359

推薦閱讀更多精彩內(nèi)容

  • babel官網(wǎng) babel 介紹 Babel 是一個通用的多用途 JavaScript 編譯器泽裳。通過 Babel ...
    鋒享前端閱讀 1,826評論 0 10
  • 模版 項目模版就是在項目創(chuàng)建之后芽世,默認(rèn)帶的一些文件。比如用react-native-cli創(chuàng)建的項目诡壁,運行之后就會...
    mah93閱讀 1,231評論 0 0
  • babel官網(wǎng) babel 介紹 Babel 是一個通用的多用途 JavaScript 編譯器。通過 Babel ...
    不得不愛XIN閱讀 1,143評論 0 9
  • ESLint 簡介 ESLint是一個開源的JavaScript代碼檢查工具箕宙,其作者是大名鼎鼎的“紅寶書”《Jav...
    AndyChen閱讀 6,400評論 1 3
  • 前言 搭一個腳手架真不是一件容易的事铺纽,之前為了學(xué)習(xí)webpack是怎么配置的選擇自己搭建開發(fā)環(huán)境,折騰了好幾天總算...
    大柚子08閱讀 22,363評論 24 40