父子兄弟組件傳參交互 vue vs react

ps:忽略全局數據組織方案如vuex和redux等

round 1: 父子爺孫傳參

首先上場的使我們的vue,國人開源界驕傲尤雨溪的親兒子。以簡單易上手api豐富而著稱

  1. props:父 => 子: props, 子 =>父:props,爺孫:通過父來連接
    通過props像子元素傳值,原則上子元素不可以修改props的值,但是傳遞的props爲引用值時,子元素修改也會反映到父元素,用起來方便得很,非常適用於樹形組件結構

  2. props + $emit : 父 => 子: props,子 => 父 :$emit, 爺孫:通過父來連接。
    如果props是非引用類型,就可以使用emit來改變父元素傳遞的數據了

  3. props + 函數:父 => 子:props,子 => 父:props傳遞的函數,爺孫: 通過父來連接
    通過props向子組件傳遞一個修改父組件數據的函數,來改變父組件

  4. $parent, $chindren:父 => 子:$children,子 => 父:$parent,爺孫:$parent.$parent和$children[0].$children...
    vue實例注入了$parent 和 、$children 引用,指向父子,用起來也很方便

  5. event bus :父 => 子: event bus ,子 => 父:event bus,爺孫: event bus。
    定義一個單獨的vue文件,作爲事件傳播器,用起來很方便,父子兄弟都可以共同使用

  6. provide,inject:父 => 子:inject,子 => 父:可以使用props的所有子 => 父方法,爺孫:inject
    多層級傳遞數據,如果不向上傳遞數據使用起來還是蠻方便

  7. $attr, $listeners:父 => 子:$attr, $listener,子 => 父:可以使用props的所有子 => 父方法,爺孫:$attr, $listener
    使用較少,文檔說在創建高級別的組件時非常有用。

  8. $refs:父 => 子:$refs,子 => 父:可以使用props的所有子 => 父方法,爺孫:$refs
    使用較爲方便,完美獲取子組件所有方法。

其次上場的是我們久負盛名的react,函數式,支持typescript,靈活小巧無一不讓前端開發者們歡呼吶喊

  1. props:父 => 子:props,子 => 父:props傳遞的函數,爺孫:通過父來連接
    和vue的第三種一樣,
  2. props 傳遞組件:父 => 子:在父組件中隨便給傳遞的組件賦值,子 => 父:通過賦值的函數,爺孫: 通過父來傳遞props組件
  3. render props:與第二個同理
  4. context:與vue provide inject類似,
  5. ref: 與vue $refs用法類似。
  6. event bus: 與vue 用法類似

vue 略勝一籌

round 2:兄弟組件傳參

這次讓react先上場吧,爲了公平,畢竟第一回合輸了

  1. 通過共同的祖先傳遞參數: 父組件,context等,
  2. event bus:通過共同的朋友傳遞參數...
    總之就是通過別人傳遞

接下來看看vue有沒有什麼好的表現

  1. 通過共同的祖先傳遞參數: 父組件,provide,attr等,
  2. event bus:通過共同的朋友傳遞參數...
    總之也是通過別人傳遞

打平,,沒啥好辦法

總結

通過以上對決,我們能夠看出,組件間傳遞數據兩者方法都很像,唯一的區別就是vue提供了更多的api來方便我們的使用,而react很函數式,組件都能傳來傳去....使得react的寫法異常靈活。。

本場pk結束!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章