React & Vue組件間數(shù)據(jù)傳遞方式

? ? ? ?React和Vue是兩個(gè)某些方面的都非常相似的框架,在組件間數(shù)據(jù)通訊思路也基本相似宇立,下面我主要講講二者在父子組件間通信、非父子組件間的通訊代咸、以及父組件向下數(shù)據(jù)廣播等幾個(gè)方面講講如何實(shí)現(xiàn)組件中的數(shù)據(jù)通訊国撵,當(dāng)然二者現(xiàn)在都用對(duì)應(yīng)的狀管理的庫(kù)陵吸,像vue的Vuex,React的Mobx和Redux都是比較好的狀態(tài)管理方案。若是項(xiàng)目本身不是較復(fù)雜且全局公用的參數(shù)很少的話介牙,建議沒(méi)必要引入狀態(tài)管理方案壮虫,直接利用框架現(xiàn)有的通訊方式去處理數(shù)據(jù)的通訊。

單向數(shù)據(jù)流环础,首先大家得明白R(shí)eact和Vue父子組件間都是單向數(shù)據(jù)流的.(即父組件往子組件傳遞數(shù)據(jù)囚似,但是子組件修改這個(gè)數(shù)據(jù)不會(huì)造成父組件傳遞的這個(gè)數(shù)據(jù)的改變,注:Vue1.x中利用props的twoWay和.sync綁定修飾符就可以實(shí)現(xiàn)props的雙向綁定功能线得,但是在Vue2中已經(jīng)廢棄了此功能)

1饶唤、父子組件中通信,react和vue的方式幾乎完全一樣贯钩,都是通過(guò)props向子組件傳遞數(shù)據(jù)募狂,較簡(jiǎn)單。具體可查看官方文檔角雷。

2祸穷、事件廣播(父組件的某個(gè)數(shù)據(jù)向下廣播,下面的子組件都可以接收)

vue1.x

在vue1.x中父組件通過(guò)broadcast來(lái)實(shí)現(xiàn)向下所有的子組件傳遞數(shù)據(jù)勺三,而子組件可以通過(guò)dispatch層層向上向各父組件傳遞數(shù)據(jù)粱哼。子組件通過(guò)dispatch事件冒泡沿著各級(jí)父組件層層向上傳遞數(shù)據(jù)。(broadcast和dispatch已經(jīng)在vue2.x中被廢除了檩咱,vue2.x版本推薦使用中央事件總線$emit揭措、$on)基本使用如下:

子組件在事件中觸發(fā)的方法(methods選項(xiàng)中)中通過(guò)$.dispatch(“和父組件對(duì)接的自定義名稱(chēng)”,需要傳遞的數(shù)據(jù))向上傳給需要接收的父組件刻蚯,需要接收的父組件在events選項(xiàng)中監(jiān)聽(tīng)約定好的自定義的對(duì)接名稱(chēng)(圖中為“child-msg”),這個(gè)回調(diào)函數(shù)中傳入的實(shí)參即為子組件傳遞來(lái)的數(shù)據(jù)绊含。broadcast的使用方式同理。

Vue 2.x

vue2.0里面已經(jīng)廢除了broadcast炊汹、dispatch躬充,替代方案官方推薦vuex或者全局事件驅(qū)動(dòng),若果使用場(chǎng)景不復(fù)雜的話讨便,vue2.0里面非父子組件的通信(包含隔代從屬關(guān)系)推薦使用一個(gè)空的 Vue 實(shí)例作為中央事件總線($emit/$on)去實(shí)現(xiàn)數(shù)據(jù)的傳遞充甚。這一塊官網(wǎng)上并沒(méi)有做很清晰的解釋?zhuān)约好鲿r(shí)可能會(huì)犯點(diǎn)小錯(cuò),其實(shí)很簡(jiǎn)單霸褒,下面我就講我寫(xiě)的代碼粘貼出來(lái)供大家參考:

代碼


基本思路:①創(chuàng)建一個(gè)bus.js文件伴找,在里面輸出一個(gè)空的vue的實(shí)例,作為中央事件總線(也可以不用單獨(dú)創(chuàng)立一個(gè)文件)
? ? ? ? ? ? ? ? ? ②在觸發(fā)數(shù)據(jù)改變的組件中引入bus.js中創(chuàng)建的實(shí)例废菱,并在相應(yīng)的事件處理程序中bus.$emit(‘名字’技矮,傳遞的數(shù)據(jù))去觸發(fā)數(shù)據(jù)傳遞
? ? ? ? ? ? ? ? ? ③在監(jiān)聽(tīng)數(shù)據(jù)的組件中引入bus.js中創(chuàng)建的實(shí)例抖誉,在created選項(xiàng)中bus.$on('名字',function(傳遞的數(shù)據(jù)){// 傳回?cái)?shù)據(jù)相應(yīng)的處理})監(jiān)聽(tīng)傳來(lái)的數(shù)據(jù)衰倦,在回調(diào)函數(shù)中進(jìn)行相應(yīng)的處理袒炉。


React

react中也有類(lèi)似的父組件向所有的子組件傳遞數(shù)據(jù)的方式,若在使用場(chǎng)景不太復(fù)雜的情況下也可以使用樊零。下面代碼僅以ES6的方式去展示代碼的書(shū)寫(xiě)我磁。下圖代碼組件的層級(jí)關(guān)系為One -----> Three ------->Four,代碼實(shí)現(xiàn)在Four組件中直接使用One組件中的state驻襟。

React中向所有子組件傳遞數(shù)據(jù)


基本思路:①在頂層父組件中使用childContextTypes去指定傳入值的要求夺艰,和父子組件間定義props一樣。在getChildContext方法 中return出你要向下傳遞state塑悼。
? ? ? ? ? ? ? ? ? ②在需要接收父組件傳遞的數(shù)據(jù)的子組件中使用contextTypes指定值的要求劲适,在子組件代碼中直接使用“ this.context.名稱(chēng) ”即可使用這個(gè)值楷掉。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末厢蒜,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子烹植,更是在濱河造成了極大的恐慌斑鸦,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,183評(píng)論 6 516
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件草雕,死亡現(xiàn)場(chǎng)離奇詭異巷屿,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)墩虹,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,850評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門(mén)嘱巾,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人诫钓,你說(shuō)我怎么就攤上這事旬昭。” “怎么了菌湃?”我有些...
    開(kāi)封第一講書(shū)人閱讀 168,766評(píng)論 0 361
  • 文/不壞的土叔 我叫張陵问拘,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我惧所,道長(zhǎng)骤坐,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 59,854評(píng)論 1 299
  • 正文 為了忘掉前任下愈,我火速辦了婚禮纽绍,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘势似。我一直安慰自己顶岸,他們只是感情好腔彰,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,871評(píng)論 6 398
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著辖佣,像睡著了一般霹抛。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上卷谈,一...
    開(kāi)封第一講書(shū)人閱讀 52,457評(píng)論 1 311
  • 那天杯拐,我揣著相機(jī)與錄音,去河邊找鬼世蔗。 笑死端逼,一個(gè)胖子當(dāng)著我的面吹牛步脓,可吹牛的內(nèi)容都是我干的柏肪。 我是一名探鬼主播,決...
    沈念sama閱讀 40,999評(píng)論 3 422
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼鲫凶,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼寸爆!你這毒婦竟也來(lái)了礁鲁?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 39,914評(píng)論 0 277
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤赁豆,失蹤者是張志新(化名)和其女友劉穎仅醇,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體魔种,經(jīng)...
    沈念sama閱讀 46,465評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡析二,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,543評(píng)論 3 342
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了节预。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片叶摄。...
    茶點(diǎn)故事閱讀 40,675評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖安拟,靈堂內(nèi)的尸體忽然破棺而出蛤吓,到底是詐尸還是另有隱情,我是刑警寧澤去扣,帶...
    沈念sama閱讀 36,354評(píng)論 5 351
  • 正文 年R本政府宣布柱衔,位于F島的核電站,受9級(jí)特大地震影響愉棱,放射性物質(zhì)發(fā)生泄漏唆铐。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,029評(píng)論 3 335
  • 文/蒙蒙 一奔滑、第九天 我趴在偏房一處隱蔽的房頂上張望艾岂。 院中可真熱鬧,春花似錦朋其、人聲如沸王浴。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,514評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)氓辣。三九已至秒裕,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間钞啸,已是汗流浹背几蜻。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,616評(píng)論 1 274
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留体斩,地道東北人梭稚。 一個(gè)月前我還...
    沈念sama閱讀 49,091評(píng)論 3 378
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像絮吵,于是被迫代替她去往敵國(guó)和親弧烤。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,685評(píng)論 2 360

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