ReactNative—常用的導(dǎo)入導(dǎo)出方式

React Native中常用的導(dǎo)入導(dǎo)出方式主要包括三種:require()import ''@providesModule

1 require方式

由CommonJS提供支持识樱。

CommonJS是nodejs也就是服務(wù)器端廣泛使用的模塊化機(jī)制。 該規(guī)范的主要內(nèi)容是壶愤,模塊必須通過(guò)module.exports 導(dǎo)出對(duì)外的變量或接口,通過(guò) require() 來(lái)導(dǎo)入其他模塊的輸出到當(dāng)前模塊作用域中馏鹤。

導(dǎo)出方式

  • 導(dǎo)出變量
var x = 5;
module.exports.x = x;
  • 導(dǎo)出函數(shù)
var addX = function (value) {
  return value + x;
};
module.exports.addX = addX;
  • 導(dǎo)出多個(gè)文件
module.exports = {
    TripComputation: require('./TripComputation'),
    FlightComputation:require("./FlightComputation"),
};

導(dǎo)入方式

var app = require('./app.js');

限制

require()的導(dǎo)入方式征椒,在代碼塊外部、內(nèi)部均可以使用

2 import方式

由ES6提供支持

    ES6正式提出了內(nèi)置的模塊化語(yǔ)法湃累,我們?cè)跒g覽器端無(wú)需額外引入requirejs來(lái)進(jìn)行模塊化勃救。

export導(dǎo)出

  • 導(dǎo)出變量
export var color = "red";
export let name = "cz";
export const age = 25;
  • 導(dǎo)出函數(shù)
export function add(num1,num2){
    return num1+num2;
}
  • 導(dǎo)出類(lèi)
export class Rectangle {
    constructor(length, width) {
        this.length = length;
        this.width = width;
    }
}
  • 導(dǎo)出對(duì)象
function multiply(num1, num2) {
    return num1 * num2;
}

export {multiply}
  • 導(dǎo)出時(shí)重命名
//重命名變量
export color as newColor;

//重命名函數(shù)
export {multiply as newMultiply}

//重命名類(lèi)
export Rectangle as NewRectangle
  • 導(dǎo)出默認(rèn)值
export default function(num1, num2) {
    return num1 + num2;
}

模塊的默認(rèn)值是使用 default 關(guān)鍵字所指定的單個(gè)變量、函數(shù)或類(lèi)治力,而你在每個(gè)模塊中只能設(shè)置一個(gè)默認(rèn)導(dǎo)出蒙秒。

function sum(num1, num2) {
    return num1 + num2;
}

export { sum as default };

使用重命名語(yǔ)法來(lái)導(dǎo)出默認(rèn)值。

import導(dǎo)入

  • 導(dǎo)入一個(gè)(變量宵统、函數(shù)晕讲、類(lèi))

一個(gè)文件導(dǎo)入的內(nèi)容相當(dāng)于一個(gè)模塊,若是從這個(gè)模塊中導(dǎo)入一個(gè)變量榜田、函數(shù)或類(lèi)益兄,則相當(dāng)于從一個(gè)對(duì)象中進(jìn)行解構(gòu)。

import {sum} from './example.js'
  • 導(dǎo)入多個(gè)(變量箭券、函數(shù)净捅、類(lèi))
import {sum, multiply} from './example.js'
  • 導(dǎo)入整個(gè)模塊

將整個(gè)模塊當(dāng)做單一對(duì)象導(dǎo)入,該模塊的所有導(dǎo)出都會(huì)作為對(duì)象的屬性存在,這種導(dǎo)入格式被稱(chēng)為命名空間導(dǎo)入辩块。

import * as example from './example.js';
example.sum(1,2);
example.multiply(2,3);
  • 重命名導(dǎo)入
import { sum as add} from './example.js'
  • 導(dǎo)入默認(rèn)值
//導(dǎo)出默認(rèn)值
export default function(num1, num2) {
    return num1 + num2;
}
//導(dǎo)入默認(rèn)值蛔六,sum 被用于代表目標(biāo)模塊所默認(rèn)導(dǎo)出的函數(shù),因此無(wú)需使用花括號(hào)
import sum from "./example.js";
//默認(rèn)值和非默認(rèn)值在同一個(gè)文件中導(dǎo)出
export let color = "red";

export default function(num1, num2) {
    return num1 + num2;
}
//同時(shí)導(dǎo)入默認(rèn)值和非默認(rèn)值废亭,默認(rèn)名稱(chēng)必須位于非默認(rèn)名稱(chēng)之前
import sum,{color} from "./example.js"

導(dǎo)入的再導(dǎo)出

  • 有時(shí)想在當(dāng)前的模塊中將已導(dǎo)入的內(nèi)容再導(dǎo)出去
//寫(xiě)法一
import {sum} from './example.js'
……
export {sum}
//寫(xiě)法二
export {sum} from './example.js'
//重命名的寫(xiě)法
export { sum as add } from "./example.js";
//整個(gè)模塊導(dǎo)出法
export * from "./example.js";

使用限制

export 與 import必須被用在其他語(yǔ)句或表達(dá)式的外部国章,而不能使用在if等代碼塊內(nèi)部。原因之一是模塊語(yǔ)法需要讓 JS 能靜態(tài)判斷需要導(dǎo)出什么豆村,正因?yàn)榇艘菏蓿阒荒茉谀K的頂級(jí)作用域使用 export與import。

3 @providesModule

由ReactNative提供支持

以上兩種方式掌动,到導(dǎo)入時(shí)均使用文件的相對(duì)路徑四啰,若是文件層次較深,則相對(duì)路徑寫(xiě)起來(lái)容易搞錯(cuò)粗恢,讀的時(shí)候也不易辨別柑晒。因此,ReactNative提供了一個(gè)關(guān)鍵字@providesModule眷射,可以直接根據(jù)模塊名稱(chēng)進(jìn)行導(dǎo)入匙赞。

  • 導(dǎo)出

在文件的頂部佛掖,嵌套一個(gè)多行注釋?zhuān)袬providesModule放在注釋里。
ps: 帶有@providesModule的多行注釋?zhuān)欢ㄒ俏募牡谝粋€(gè)多行注釋涌庭。

/**
 * @providesModule CommonComponent
 */

import {
    Dimensions
} from 'react-native';

export default class Common {
...
}
  • 導(dǎo)入
// 以前需要這樣
// import CommonComponent from './../Common/CommonComponent'

// 現(xiàn)在可以直接用類(lèi)名
import CommonComponent from 'CommonComponent'

限制

只能在RN這種環(huán)境下用芥被,不能用于前端的項(xiàng)目。

缺陷

  • 容易造成命名重復(fù)脾猛,需要開(kāi)發(fā)者規(guī)則命名規(guī)則撕彤,比如添加前綴、后綴猛拴。
  • 無(wú)法根據(jù)引入模塊的路徑查找文件,可以根據(jù)模塊名稱(chēng)進(jìn)行全文搜索蚀狰。

原理

RN在打包腳本的時(shí)候會(huì)檢測(cè)該類(lèi)型文件愉昆,并在整個(gè)項(xiàng)目文件查找到對(duì)應(yīng)文件替換成對(duì)應(yīng)的模塊代碼。打出來(lái)的包還是跟導(dǎo)入相對(duì)路徑是一樣的麻蹋。

4 擴(kuò)展

文件路徑

以上的導(dǎo)入方式跛溉,均是使用文件路徑導(dǎo)入文件的,文件路徑的使用方式如下:

  • 以 / 為起始扮授,表示從根目錄開(kāi)始解析芳室;
  • 以 ./ 為起始堪侯,表示從當(dāng)前目錄開(kāi)始解析模暗;
  • 以 ../ 為起始梯嗽,表示從上級(jí)目錄開(kāi)始解析齿尽;

參考:

https://blog.csdn.net/crystal6918/article/details/74906757/
https://segmentfault.com/a/1190000004593603
http://www.reibang.com/p/810abc8792be

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市灯节,隨后出現(xiàn)的幾起案子循头,更是在濱河造成了極大的恐慌,老刑警劉巖炎疆,帶你破解...
    沈念sama閱讀 206,214評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件卡骂,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡形入,警方通過(guò)查閱死者的電腦和手機(jī)全跨,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,307評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)唯笙,“玉大人螟蒸,你說(shuō)我怎么就攤上這事”谰颍” “怎么了七嫌?”我有些...
    開(kāi)封第一講書(shū)人閱讀 152,543評(píng)論 0 341
  • 文/不壞的土叔 我叫張陵,是天一觀(guān)的道長(zhǎng)苞慢。 經(jīng)常有香客問(wèn)我诵原,道長(zhǎng),這世上最難降的妖魔是什么挽放? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 55,221評(píng)論 1 279
  • 正文 為了忘掉前任绍赛,我火速辦了婚禮,結(jié)果婚禮上辑畦,老公的妹妹穿的比我還像新娘吗蚌。我一直安慰自己,他們只是感情好纯出,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,224評(píng)論 5 371
  • 文/花漫 我一把揭開(kāi)白布蚯妇。 她就那樣靜靜地躺著敷燎,像睡著了一般。 火紅的嫁衣襯著肌膚如雪箩言。 梳的紋絲不亂的頭發(fā)上硬贯,一...
    開(kāi)封第一講書(shū)人閱讀 49,007評(píng)論 1 284
  • 那天,我揣著相機(jī)與錄音陨收,去河邊找鬼饭豹。 笑死,一個(gè)胖子當(dāng)著我的面吹牛务漩,可吹牛的內(nèi)容都是我干的拄衰。 我是一名探鬼主播,決...
    沈念sama閱讀 38,313評(píng)論 3 399
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼菲饼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼肾砂!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起宏悦,我...
    開(kāi)封第一講書(shū)人閱讀 36,956評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎包吝,沒(méi)想到半個(gè)月后饼煞,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,441評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡诗越,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,925評(píng)論 2 323
  • 正文 我和宋清朗相戀三年砖瞧,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片嚷狞。...
    茶點(diǎn)故事閱讀 38,018評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡块促,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出床未,到底是詐尸還是另有隱情竭翠,我是刑警寧澤,帶...
    沈念sama閱讀 33,685評(píng)論 4 322
  • 正文 年R本政府宣布薇搁,位于F島的核電站斋扰,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏啃洋。R本人自食惡果不足惜传货,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,234評(píng)論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望宏娄。 院中可真熱鬧问裕,春花似錦、人聲如沸孵坚。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,240評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至窟勃,卻和暖如春祖乳,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背秉氧。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,464評(píng)論 1 261
  • 我被黑心中介騙來(lái)泰國(guó)打工眷昆, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人汁咏。 一個(gè)月前我還...
    沈念sama閱讀 45,467評(píng)論 2 352
  • 正文 我出身青樓亚斋,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親攘滩。 傳聞我的和親對(duì)象是個(gè)殘疾皇子帅刊,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,762評(píng)論 2 345

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

  • 點(diǎn)擊此鏈接閱讀體驗(yàn)更好Es6中的模塊默認(rèn)導(dǎo)入導(dǎo)出及加載順序 前言 在前面一Es6中的模塊化Module,導(dǎo)入(im...
    itclanCoder閱讀 3,660評(píng)論 0 0
  • 系列文章導(dǎo)航 模塊(一) CommonJs,AMD, CMD, UMD 本文參考阮一峰 ES6入門(mén) Module的...
    合肥黑閱讀 6,095評(píng)論 0 4
  • 通常情況一般都是由view中的觸發(fā)者(button)之類(lèi)的事件,觸發(fā)block漂问,在控制器中處理赖瞒。但是其實(shí)是可以在v...
    碼修閱讀 299評(píng)論 0 1
  • 簡(jiǎn)要介紹一下20秒原則:這是戰(zhàn)隼公眾號(hào)上提出的一個(gè)行動(dòng)準(zhǔn)則。大意是如果你想養(yǎng)成什么樣的習(xí)慣蚤假,你最好能在20秒內(nèi)就能...
    森書(shū)閱讀 232評(píng)論 1 0
  • 今天第一節(jié)課把前關(guān)于長(zhǎng)方體栏饮,正方體的公式復(fù)習(xí)檢查了一遍,處理了課本長(zhǎng)方體磷仰,正方體的習(xí)題袍嬉。發(fā)現(xiàn)有幾點(diǎn)問(wèn)題,一是對(duì)于公...
    韓小星星閱讀 120評(píng)論 0 1