為什么我們需要 Vuex

一燎含、一個錯誤引發(fā)的思考

在 Weex 子組件中通過 this.$parent.$emit('event') 觸發(fā)父組件的事件万俗,父組件通過 this.$on('event', handler) 接收事件饱溢,從而實現(xiàn)父子組件的通信蝶俱。這在 Native 端表現(xiàn)正常瘦馍,然而當使用 Vue-loader 編譯代碼碳褒,引入 vue-runtimeweex-vue-render 在瀏覽器端運行的時候,事件無法正常捕獲莲组,這是什么原因呢诊胞?

假設把前文所說的父組件命名為 father, 子組件命名為 child,起初, Weex 中:

    child.$parent === father // true

我們?yōu)榱送ㄖ?father 去做某件事情锹杈,可以在 child 中使用 this.$parent.$emit撵孤,可是當解析到瀏覽器執(zhí)行的時候,Debugger 發(fā)現(xiàn):

    child.$parent === father // false
    child.$parent.$parent === father // false

也就是在 father 和 child 之間竭望,多了一層組件的封裝邪码,之前的父子關系發(fā)生了改變,事件自然無法正常傳達

這是因為咬清,在 Weex 中有很多內建組件闭专,底層基于 Native 端實現(xiàn),當通過 vue-runtime 在瀏覽器運行的時候旧烧,需要將這些內建組件用基于瀏覽器的 Vue 組件代替影钉,而這些 Vue 組件要實現(xiàn)類似底層 Native 組件的效果,極有可能需要封裝多層粪滤,也就是會出現(xiàn)上述的父子關系變更的情況

可以認為是 Weex 做得不好的地方,但是我覺著雀扶,就算沒有這個錯誤杖小,也應該避免使用
this.$parent

二、this.$parent 背離了組件解耦的原則

上述的組件通信方式愚墓,是從哪來的奇淫巧技予权,我都已忘記,目前在 Vue 官網上找不到這種使用方法浪册,也就是連官方都不推薦了更印證了不應該使用 this.$parent 的說法扫腺。

其實原因也很簡單,子組件引用父組件的實例村象,這種強關聯(lián)背離了組件的解耦原則笆环,子組件依賴于某一特定的父組件攒至,那么這個子組件只適用在這個父組件下,把這個子組件放到別處躁劣,就無法正常運行(或者有功能的缺失)迫吐,并且一旦出現(xiàn)章節(jié)一中父子關系變更的情況,結果更加難以預料

那么子父組件確實是需要通信的時候账忘,不使用 this.$parent 有什么替代方案么志膀?答案是有的,Vue 中有個 bus 總線鳖擒,子組件通過 bus.$emit把事件發(fā)到總線中溉浙,任何組件都可以監(jiān)聽這個事件。也就是子組件只負責觸發(fā)事件蒋荚,并不需要關心具體的處理組件戳稽。總線接收到事件信號后圆裕,發(fā)送到監(jiān)聽了該事件的組件處理

對于父到子的通信广鳍,父組件通過 props 向子組件傳入參數,對于這個方向的數據流吓妆,我們卻不用太擔心的解耦的問題赊时,因為父組件作為調用方只需要傳遞子組件需要的參數即可,子組件只需要關心參數行拢,并不需要關心是誰在調用祖秒,同樣可以順利移植,完成解耦

從這個層面來說舟奠,從某種意義上說竭缝,單向數據流促進了組件間的解耦

三、這同樣可以解釋為什么我們需要 Vuex

以這個角度來觀察 Vuex 以及所有單向數據流狀態(tài)控制框架沼瘫,是不是某種意義上的事件總線呢抬纸?

bus.png
store.png

其實 Vuex 不過是 Bus 更高級細致的實現(xiàn)而已,連官方文檔也說了耿戚,有必要好好思考下你是否真的需要 Vuex湿故,如果你的應用本身不復雜,其實只需要一個簡單的 Bus 就夠了

菲麥前端專題膜蛔,匯聚前端好文坛猪,邀您關注!

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末皂股,一起剝皮案震驚了整個濱河市墅茉,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖就斤,帶你破解...
    沈念sama閱讀 216,997評論 6 502
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件悍募,死亡現(xiàn)場離奇詭異,居然都是意外死亡战转,警方通過查閱死者的電腦和手機搜立,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,603評論 3 392
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來槐秧,“玉大人啄踊,你說我怎么就攤上這事〉蟊辏” “怎么了颠通?”我有些...
    開封第一講書人閱讀 163,359評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長膀懈。 經常有香客問我顿锰,道長,這世上最難降的妖魔是什么启搂? 我笑而不...
    開封第一講書人閱讀 58,309評論 1 292
  • 正文 為了忘掉前任硼控,我火速辦了婚禮,結果婚禮上胳赌,老公的妹妹穿的比我還像新娘牢撼。我一直安慰自己,他們只是感情好疑苫,可當我...
    茶點故事閱讀 67,346評論 6 390
  • 文/花漫 我一把揭開白布熏版。 她就那樣靜靜地躺著,像睡著了一般捍掺。 火紅的嫁衣襯著肌膚如雪撼短。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,258評論 1 300
  • 那天挺勿,我揣著相機與錄音曲横,去河邊找鬼。 笑死不瓶,一個胖子當著我的面吹牛禾嫉,可吹牛的內容都是我干的。 我是一名探鬼主播湃番,決...
    沈念sama閱讀 40,122評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼夭织,長吁一口氣:“原來是場噩夢啊……” “哼吭露!你這毒婦竟也來了吠撮?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 38,970評論 0 275
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎泥兰,沒想到半個月后弄屡,有當地人在樹林里發(fā)現(xiàn)了一具尸體,經...
    沈念sama閱讀 45,403評論 1 313
  • 正文 獨居荒郊野嶺守林人離奇死亡鞋诗,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,596評論 3 334
  • 正文 我和宋清朗相戀三年膀捷,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片削彬。...
    茶點故事閱讀 39,769評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡全庸,死狀恐怖,靈堂內的尸體忽然破棺而出融痛,到底是詐尸還是另有隱情壶笼,我是刑警寧澤,帶...
    沈念sama閱讀 35,464評論 5 344
  • 正文 年R本政府宣布雁刷,位于F島的核電站覆劈,受9級特大地震影響,放射性物質發(fā)生泄漏沛励。R本人自食惡果不足惜责语,卻給世界環(huán)境...
    茶點故事閱讀 41,075評論 3 327
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望目派。 院中可真熱鬧坤候,春花似錦、人聲如沸址貌。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,705評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽练对。三九已至遍蟋,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間螟凭,已是汗流浹背虚青。 一陣腳步聲響...
    開封第一講書人閱讀 32,848評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留螺男,地道東北人棒厘。 一個月前我還...
    沈念sama閱讀 47,831評論 2 370
  • 正文 我出身青樓,卻偏偏與公主長得像下隧,于是被迫代替她去往敵國和親奢人。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,678評論 2 354

推薦閱讀更多精彩內容

  • 序 今年大前端的概念一而再再而三的被提及淆院,那么大前端時代究竟是什么呢何乎?大前端這個詞最早是因為在阿里內部有很多前端開...
    一縷殤流化隱半邊冰霜閱讀 11,233評論 19 92
  • 這篇筆記主要包含 Vue 2 不同于 Vue 1 或者特有的內容,還有我對于 Vue 1.0 印象不深的內容。關于...
    云之外閱讀 5,050評論 0 29
  • 拎著垃圾的手怎么能接住上帝給的禮物呢支救? 我是有價值的抢野, 別人拒絕我是別人有別的事而不是對自己不滿意,我永遠是最棒的...
    阿綣兒閱讀 522評論 0 0
  • 海濱 孩子們相聚在海濱各墨。 無垠的天空在頭頂上沉默指孤,躁動的流水在大海中喧囂。 孩子們歡呼起舞贬堵,相聚在海濱恃轩。 他們以沙...
    _覺淺閱讀 712評論 0 1
  • “什么,你要逃黎做?详恼!”辛哥酒勁立馬醒了,“沒錯引几,我早就想到了昧互,多虧辛哥,我敢干了伟桅!”之風信誓旦旦敞掘,辛哥還在懵逼中,...
    百事渴了閱讀 388評論 0 0