欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Vue和React組件之間的傳值方式詳解

 更新時(shí)間:2019年01月31日 09:32:18   作者:mdiep  
這篇文章主要介紹了Vue和React組件之間的傳值方式詳解,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧

在現(xiàn)代的三大框架中,其中兩個(gè)Vue和React框架,組件間傳值方式有哪些?

組件間的傳值方式

組件的傳值場(chǎng)景無外乎以下幾種:

  • 父子之間
  • 兄弟之間
  • 多層級(jí)之間(孫子祖父或者更多)
  • 任意組件之間

父子之間

Vue

Vue是基于單項(xiàng)數(shù)據(jù)流設(shè)計(jì)的框架,但是提供了一些的語(yǔ)法,指令去實(shí)現(xiàn)一些操作

  • 父->子:通過props進(jìn)行傳遞數(shù)據(jù)給子組件
  • 子->父:通過emit向父組件傳值

同時(shí),還有一些其他進(jìn)行父子組件通信的方式,通過$parent和$children獲取組件的父或者子組件的實(shí)例,之后通過實(shí)例對(duì)象去修改組件的屬性。在表單控件中,使用v-model實(shí)現(xiàn)了雙向數(shù)據(jù)綁定,其實(shí)這里v-model是一個(gè)語(yǔ)法糖,內(nèi)部實(shí)現(xiàn)還是監(jiān)聽了表單控件的change事件,然后將數(shù)據(jù)傳遞給組件修改數(shù)據(jù),從而實(shí)現(xiàn)了雙向數(shù)據(jù)綁定。

React

  • 父->子:通過props將數(shù)據(jù)傳遞給子組件
  • 子->父:通過父組件向子組件傳遞函數(shù),然后子組件中調(diào)用這些函數(shù),利用回調(diào)函數(shù)實(shí)現(xiàn)數(shù)據(jù)傳遞

兄弟之間

Vue

在Vue中,可以通過查找父組件下的子組件實(shí)例,然后進(jìn)行組件進(jìn)行通信。如this.$parent.$children,在$children中,可以通過組件的name找到要通信的組件,進(jìn)而進(jìn)行通信。

React

在React中,需要現(xiàn)將數(shù)據(jù)傳遞給父組件,然后父組件再傳遞給兄弟組件。

多層級(jí)組件

Vue

在多層級(jí)的組件中,當(dāng)然可以通過不斷的獲取$parent找到需要傳遞的祖先級(jí)組件,然后進(jìn)行通信,但是這樣繁瑣易錯(cuò),并不推薦。Vue在2.2.0 新增提供了provide/inject的方式進(jìn)行傳遞數(shù)據(jù)。即在祖先組件提供數(shù)據(jù),在需要使用的組件中,注入數(shù)據(jù),這樣就可以在子組件中使用數(shù)據(jù)了。provide/inject文檔

// 父級(jí)組件提供 'foo'
var Provider = {
 provide: {
  foo: 'bar'
 },
 // ...
}

// 子組件注入 'foo'
var Child = {
 inject: ['foo'],
 created () {
  console.log(this.foo) // => "bar"
 }
 // ...
}

React

在React中,提供了一個(gè)和Vue類似的處理多層級(jí)組件通信的方式——context,這里會(huì)提供一個(gè)生產(chǎn)者和一個(gè)消費(fèi)者,會(huì)在父組件中生產(chǎn)數(shù)據(jù),在子組件中消費(fèi)數(shù)據(jù)。從使用上來說,只需要將子組件包裹在生產(chǎn)者的Provider中,在需要用到數(shù)據(jù)的子組件中,通過Consumer包裹,就可以拿到生產(chǎn)者的數(shù)據(jù)。context文檔

// Theme context, default to light theme
const ThemeContext = React.createContext('light');

class App extends React.Component {
 render() {
  const {signedInUser, theme} = this.props;

  // App component that provides initial context values
  return (
   <ThemeContext.Provider value={theme}>
    <Layout />
   </ThemeContext.Provider>
  );
 }
}

function Layout() {
 return (
  <div>
   <Sidebar />
   <Content />
  </div>
 );
}

// A component may consume multiple contexts
function Content() {
 return (
  <ThemeContext.Consumer>
   {theme => (
     <ProfilePage theme={theme} />
   )}
  </ThemeContext.Consumer>
 );
}

任意組件之間

Vue

對(duì)于任意組件,簡(jiǎn)單的可以使用EventBus,對(duì)于更為復(fù)雜的建議使用Vuex。

React

簡(jiǎn)單的使用EventBus,復(fù)雜的使用Redux

總結(jié)

當(dāng)然,組件間的傳值是靈活的,可以有多種途徑,父子組件同樣可以使用EventBus,Vuex或者Redux,只是遵循框架開發(fā)者的建議,以及適應(yīng)開發(fā)的比較好的實(shí)踐而已。

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • Vue3計(jì)算屬性computed和監(jiān)聽屬性watch區(qū)別解析

    Vue3計(jì)算屬性computed和監(jiān)聽屬性watch區(qū)別解析

    計(jì)算屬性適用于對(duì)已有的數(shù)據(jù)進(jìn)行計(jì)算,派生新的數(shù)據(jù),并在模板中使用;而監(jiān)聽屬性適用于監(jiān)聽數(shù)據(jù)的變化,并執(zhí)行一些特定的操作,根據(jù)具體的需求和場(chǎng)景,選擇適合的機(jī)制這篇文章主要介紹了Vue3計(jì)算屬性computed和監(jiān)聽屬性watch,需要的朋友可以參考下
    2024-02-02
  • vue定義在computed的變量無法更新問題及解決

    vue定義在computed的變量無法更新問題及解決

    這篇文章主要介紹了vue定義在computed的變量無法更新問題及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-01-01
  • Vue3?KeepAlive實(shí)現(xiàn)原理解析

    Vue3?KeepAlive實(shí)現(xiàn)原理解析

    KeepAlive?是一個(gè)內(nèi)置組件,那封裝一個(gè)組件對(duì)于大家來說應(yīng)該不會(huì)有太大的困難,它的核心邏輯在于它的?render?函數(shù),它用?map?去記錄要緩存的組件,就是?[key,vnode]?的形式,這篇文章主要介紹了Vue3?KeepAlive實(shí)現(xiàn)原理,需要的朋友可以參考下
    2022-09-09
  • axios請(qǐng)求中以params或body形式傳遞參數(shù)的區(qū)別淺析

    axios請(qǐng)求中以params或body形式傳遞參數(shù)的區(qū)別淺析

    最近在做自己項(xiàng)目中,做一個(gè)非常簡(jiǎn)單的新增用戶場(chǎng)景,但是使用原生axios發(fā)送post請(qǐng)求的時(shí)候,還是踩了不少坑的,下面這篇文章主要給大家介紹了關(guān)于axios請(qǐng)求中以params或body形式傳遞參數(shù)的區(qū)別的相關(guān)資料,需要的朋友可以參考下
    2023-04-04
  • uniapp?獲取系統(tǒng)信息的方法小結(jié)

    uniapp?獲取系統(tǒng)信息的方法小結(jié)

    uni-app提供了異步(uni.getSystemInfo)和同步(uni.getSystemInfoSync)的2個(gè)API獲取系統(tǒng)信息,系統(tǒng)信息返回的內(nèi)容非常多,各操作系統(tǒng)、各家小程序、各瀏覽器對(duì)它們的定義也不相同
    2022-11-11
  • 詳解vue靜態(tài)資源打包中的坑與解決方案

    詳解vue靜態(tài)資源打包中的坑與解決方案

    本篇文章主要介紹了詳解vue靜態(tài)資源打包中的坑與解決方案,本文主要解決路徑問題,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2018-02-02
  • Vue前端導(dǎo)出Excel文件的詳細(xì)實(shí)現(xiàn)方案

    Vue前端導(dǎo)出Excel文件的詳細(xì)實(shí)現(xiàn)方案

    在開發(fā)后臺(tái)管理系統(tǒng)的時(shí)候,很多地方都要用到導(dǎo)出excel表格,比如將table中的數(shù)據(jù)導(dǎo)出到本地,下面這篇文章主要給大家介紹了關(guān)于Vue導(dǎo)出Excel文件的相關(guān)資料,需要的朋友可以參考下
    2021-09-09
  • vue新手入門出現(xiàn)function () { [native code] }錯(cuò)誤的解決方案

    vue新手入門出現(xiàn)function () { [native code]&nbs

    這篇文章主要介紹了vue新手入門出現(xiàn)function () { [native code] }錯(cuò)誤的解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-04-04
  • Vue+ElementUi實(shí)現(xiàn)點(diǎn)擊表格鏈接頁(yè)面跳轉(zhuǎn)和路由效果

    Vue+ElementUi實(shí)現(xiàn)點(diǎn)擊表格鏈接頁(yè)面跳轉(zhuǎn)和路由效果

    這篇文章主要介紹了Vue+ElementUi實(shí)現(xiàn)點(diǎn)擊表格中鏈接進(jìn)行頁(yè)面跳轉(zhuǎn)和路由,本文結(jié)合實(shí)例代碼給大家介紹的非常詳細(xì),感興趣的朋友跟隨小編一起看看吧
    2024-03-03
  • Vue中的基礎(chǔ)過渡動(dòng)畫及實(shí)現(xiàn)原理解析

    Vue中的基礎(chǔ)過渡動(dòng)畫及實(shí)現(xiàn)原理解析

    這篇文章主要介紹了Vue中的基礎(chǔ)過渡動(dòng)畫原理解析,需要的朋友可以參考下
    2018-12-12

最新評(píng)論