React Native 城市選擇(一)城市資料三方庫引入
我們在專案中有時會需要做城市選擇,
我參照的是Ant Design Mobile RN中的城市選擇功能(https://rn.mobile.ant.design/components/picker-cn/),
官方示例中城市資料是依賴@bang88/china_city_data這個庫的,所以首先要匯入專案中這個庫,
匯入後按照官方示例開開心心寫了這個程式碼
const datacity = require('@bang88/china-city-data');
順利的將示例程式碼改造到專案中,執行,然後心碎的一幕到來
然後按照錯誤提示中的1、2、3、4
1. Clear watchman watches: `watchman watch-del-all`.
2. Delete the `node_modules` folder: `rm -rf node_modules && npm install`.
3. Reset Metro Bundler cache: `rm -rf /tmp/metro-bundler-cache-*` or `npm start -- --reset-cache`.
4. Remove haste cache: `rm -rf /tmp/haste-map-react-native-packager-*`.
一頓操作猛如虎,而後執行,尷尬的紅依舊堅挺,
無奈只能上大招
刪除node_modules,重新導包
然而一頓操作後,依舊沒有任何卵用
難道是庫有問題?
此刻腦海中想到一個辦法,直接將城市json檔案自己匯入,不使用三方庫
這樣雖然可以解決問題,但是依舊不知道為什麼會這樣,
此刻作為一名技術的強烈求知慾迫使我一定要找到問題,找到原因。
最終皇天不負有心人,最終找到問題所在
換上以下程式碼
import datacity from '@bang88/china_city_data';
完美解決。
將require引入方式變更為import
ES6標準釋出後,module成為標準,標準使用是以export指令匯出介面,以import引入模組。但是在我們一貫的node模組中,我們依然採用的是CommonJS規範
impor它是編譯時的(require是執行時的),它必須放在檔案開頭,而且使用格式也是確定的,不容置疑。它不會將整個模組執行後賦值給某個變數,而是隻選擇import的介面進行編譯,這樣在效能上比require好很多。require是賦值過程,import是解構過程
綜上所述:
遇到三方庫報類似錯誤之後,大家可以考慮下是否是引入方式(import或require)的問題,也許某種情況下某種方式是好使的
參考:https://blog.csdn.net/u011486491/article/details/90265901?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromBaidu-1.control&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromBaidu-1.control