詳解React?Native中如何使用自定義的引用路徑
RN的相對路徑地獄
我剛接觸RN時,就發(fā)現(xiàn)所有的demo中給出來的路徑都是相對路徑,我自己的練習(xí)項(xiàng)目中想改成自定義的絕對路徑,但是發(fā)現(xiàn)并沒有我做前端時熟悉的webpack.config.js,所以也就不知道該怎么改了。伴隨著RN的學(xué)習(xí)和開發(fā)練習(xí),我的代碼也變得越來越多,越來越復(fù)雜,我逐漸發(fā)現(xiàn)RN的相對路徑越來越麻煩,比如我把某個文件移動到另一個不同深度的文件夾中,那么就需要把所有引用這個文件的地方都改一遍。請看下面這些例子,這些小點(diǎn)點(diǎn),晃得我眼暈。
import { deviceInfo } from '../../utilities/device'
...
import { API, DEV } from '../../../config/api'
...
import { Headers } from '../../widgets/nav'
...
import { basic } from '../../styles/theme'
...
RN的自定義路徑需要的依賴
作為前端開發(fā)時熟悉的webpack.config.js,在RN的腳手架中并沒有看到,但是要知道,webpack.config.js里用來自定義import路徑的resolve.alias最終目的也是讓babel在翻譯代碼時,能夠找到正確的路徑。所以RN里想用自定義的引用路徑,還得靠babel的配置才行。
- 安裝依賴
babel-plugin-module-resolver
yarn add babel-plugin-module-resolver -D
- 配置babel.config.js
plugins: [
[
require.resolve('babel-plugin-module-resolver'),
{
extensions: ['.js', '.jsx'],
root: ['.'],
alias: {
utilities: './src/utilities',
config: './src/config',
widgets: './src/widgets',
styles: './src/styles'
}
},
],
]
- 配置jsconfig.json
{
"compilerOptions": {
"baseUrl": ".",
"paths": {
"utilities": ["./src/utilities/*"],
"config": ["./src/config/*"],
"widgets": ["./src/widgets/*"],
"styles": ["./src/styles/*"],
}
}
}
RN腳手架默認(rèn)的情況下,是沒有這個文件的,需要自己新建。
- 把相對路徑都改成自定義引用
import { deviceInfo } from 'utilities/device'
...
import { API, DEV } from 'config/api'
...
import { Headers } from 'widgets/nav'
...
import { basic } from 'styles/theme'
...
- 重啟
yarn start
此時我發(fā)現(xiàn),自定義的路徑并沒有起作用,Metro報錯說找不到路徑。因?yàn)槲业乃蠷eact組件的定義,都是以jsx為文件后綴的。我在項(xiàng)目里使用了eslint-plugin-react這個eslint插件,它的推薦規(guī)則就是要React的組件的文件后綴為jsx。當(dāng)我把文件后綴改成js后,代碼就能正常運(yùn)行了。
我覺得文件后綴為jsx的情況下,jsconfig.js也能通過某種方式起作用,可惜我現(xiàn)在還不知道。
解決自定義引用路徑導(dǎo)致的eslint報錯問題
如果你使用了eslint-plugin-react,那么當(dāng)你用js作為React組件的文件后綴時,eslint會報錯。為了解決自定義引用路徑問題,我只能犧牲掉這條eslint的rule。在.eslintrc.js加上這一條rule,就可以解決掉它。
rules:[
'react/jsx-filename-extension': ['error', { extensions: ['.js', '.jsx']}]
]
如果你使用了airbnb或者單獨(dú)引用了eslint-plugin-import,那么當(dāng)你利用babel-plugin-module-resolver成功解析了自定義引用路徑的同時,eslint就會因?yàn)闊o法找到這些路徑而報錯。因?yàn)樯婕暗秸麄€項(xiàng)目的所有文件,不可能在文件里簡單的ignore某個rule來消除錯誤,而是需要在.eslintrc.js里覆蓋eslint-plugin-import的import/no-unresolved這條rule才行。
rules:[
'import/no-unresolved': [2, { ignore: ['^utilities', '^config', '^widgets', '^styles']}]
]
至此,解決了自定義引用路徑問題,同時避免了eslint的報錯。
以上就是詳解React Native中如何使用自定義的引用路徑的詳細(xì)內(nèi)容,更多關(guān)于React Native自定義引用路徑的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Vite+React搭建開發(fā)構(gòu)建環(huán)境實(shí)踐記錄
這篇文章主要介紹了Vite+React搭建開發(fā)構(gòu)建環(huán)境實(shí)踐,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2022-09-09
react-router browserHistory刷新頁面404問題解決方法
本篇文章主要介紹了react-router browserHistory刷新頁面404問題解決方法,非常具有實(shí)用價值,需要的朋友可以參考下2017-12-12
利用React高階組件實(shí)現(xiàn)一個面包屑導(dǎo)航的示例
這篇文章主要介紹了利用React高階組件實(shí)現(xiàn)一個面包屑導(dǎo)航的示例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-08-08
React在組件中如何監(jiān)聽redux中state狀態(tài)的改變
這篇文章主要介紹了React在組件中如何監(jiān)聽redux中state狀態(tài)的改變,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-08-08
react Input組件Compositionstart和Compositionend事件
這篇文章主要為大家介紹了Compositionstart和Compositionend事件之于react組件庫Input組件的坑解決,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-11-11
React性能優(yōu)化系列之減少props改變的實(shí)現(xiàn)方法
這篇文章主要介紹了React性能優(yōu)化系列之減少props改變的實(shí)現(xiàn)方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2019-01-01

