Vue和React组件之间的传值方式详解


Posted in Javascript onJanuary 31, 2019

在现代的三大框架中,其中两个Vue和React框架,组件间传值方式有哪些?

组件间的传值方式

组件的传值场景无外乎以下几种:

  • 父子之间
  • 兄弟之间
  • 多层级之间(孙子祖父或者更多)
  • 任意组件之间

父子之间

Vue

Vue是基于单项数据流设计的框架,但是提供了一些的语法,指令去实现一些操作

  • 父->子:通过props进行传递数据给子组件
  • 子->父:通过emit向父组件传值

同时,还有一些其他进行父子组件通信的方式,通过$parent和$children获取组件的父或者子组件的实例,之后通过实例对象去修改组件的属性。在表单控件中,使用v-model实现了双向数据绑定,其实这里v-model是一个语法糖,内部实现还是监听了表单控件的change事件,然后将数据传递给组件修改数据,从而实现了双向数据绑定。

React

  • 父->子:通过props将数据传递给子组件
  • 子->父:通过父组件向子组件传递函数,然后子组件中调用这些函数,利用回调函数实现数据传递

兄弟之间

Vue

在Vue中,可以通过查找父组件下的子组件实例,然后进行组件进行通信。如this.$parent.$children,在$children中,可以通过组件的name找到要通信的组件,进而进行通信。

React

在React中,需要现将数据传递给父组件,然后父组件再传递给兄弟组件。

多层级组件

Vue

在多层级的组件中,当然可以通过不断的获取$parent找到需要传递的祖先级组件,然后进行通信,但是这样繁琐易错,并不推荐。Vue在2.2.0 新增提供了provide/inject的方式进行传递数据。即在祖先组件提供数据,在需要使用的组件中,注入数据,这样就可以在子组件中使用数据了。provide/inject文档

// 父级组件提供 'foo'
var Provider = {
 provide: {
  foo: 'bar'
 },
 // ...
}

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

React

在React中,提供了一个和Vue类似的处理多层级组件通信的方式——context,这里会提供一个生产者和一个消费者,会在父组件中生产数据,在子组件中消费数据。从使用上来说,只需要将子组件包裹在生产者的Provider中,在需要用到数据的子组件中,通过Consumer包裹,就可以拿到生产者的数据。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

对于任意组件,简单的可以使用EventBus,对于更为复杂的建议使用Vuex。

React

简单的使用EventBus,复杂的使用Redux

总结

当然,组件间的传值是灵活的,可以有多种途径,父子组件同样可以使用EventBus,Vuex或者Redux,只是遵循框架开发者的建议,以及适应开发的比较好的实践而已。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
Jquery 获取checkbox的checked问题
Nov 16 Javascript
自己实现ajax封装示例分享
Apr 01 Javascript
分享20个提升网站界面体验的jQuery插件
Dec 15 Javascript
javascript实现汉字转拼音代码分享
Apr 20 Javascript
基于jQuery实现复选框是否选中进行答题提示
Dec 10 Javascript
js调出上下文菜单的实例
Dec 17 Javascript
实例详解JSON数据格式及json格式数据域字符串相互转换
Jan 07 Javascript
分析js闭包引起的事件注册问题
Mar 29 Javascript
jQuery实现选项卡功能(两种方法)
Mar 08 Javascript
Bootstrap下拉菜单Dropdowns的实现代码
Mar 17 Javascript
详解AngularJS ui-sref的简单使用
Apr 24 Javascript
vue使用axios跨域请求数据问题详解
Oct 18 Javascript
使用Angular Cli如何创建Angular私有库详解
Jan 30 #Javascript
async/await优雅的错误处理方法总结
Jan 30 #Javascript
新年快乐! javascript实现超级炫酷的3D烟花特效
Jan 30 #Javascript
JavaScript之解构赋值的理解
Jan 30 #Javascript
JS实现点击按钮随机生成可拖动的不同颜色块示例
Jan 30 #Javascript
JS实现的新闻列表自动滚动效果示例
Jan 30 #Javascript
谈谈为什么你的 JavaScript 代码如此冗长
Jan 30 #Javascript
You might like
聊天室php&amp;mysql(二)
2006/10/09 PHP
php和数据库结合的一个简单的web实例 代码分析 (php初学者)
2011/07/28 PHP
PHP多线程编程之管道通信实例分析
2015/03/07 PHP
Symfony2中被遗弃的getRequest()方法分析
2016/03/17 PHP
Javascript中eval函数的使用方法与示例
2007/04/09 Javascript
获取内联和链接中的样式(js代码)
2013/04/11 Javascript
window.location.href = window.location.href 跳转无反应 a超链接onclick事件写法
2013/08/21 Javascript
AngularJS入门知识之MVW类框架的编程思想探讨
2014/12/08 Javascript
JS实现n秒后自动跳转的两种方法
2020/11/30 Javascript
用js写的一个路由(简单实例)
2016/09/24 Javascript
JS+DIV实现的卷帘效果示例
2017/03/22 Javascript
自定义事件解决重复请求BUG的问题
2017/07/11 Javascript
Vuex 入门教程
2018/01/10 Javascript
基于JS开发微信网页录音功能的实例代码
2019/04/30 Javascript
Vertx基于EventBus发送接受自定义对象
2020/11/16 Javascript
[00:57]辉夜杯战队访谈宣传片—VG
2015/12/25 DOTA
[05:24]TI9采访——教练
2019/08/24 DOTA
Python中使用摄像头实现简单的延时摄影技术
2015/03/27 Python
举例讲解Python设计模式编程中对抽象工厂模式的运用
2016/03/02 Python
Python决策树之基于信息增益的特征选择示例
2018/06/25 Python
Python利用itchat库向好友或者公众号发消息的实例
2019/02/21 Python
django页面跳转问题及注意事项
2019/07/18 Python
解决django-xadmin列表页filter关联对象搜索问题
2019/11/15 Python
pytorch 常用线性函数详解
2020/01/15 Python
浅谈pymysql查询语句中带有in时传递参数的问题
2020/06/05 Python
python中adb有什么功能
2020/06/07 Python
h5网页水印SDK的实现代码示例
2019/02/19 HTML / CSS
计算机专业优秀大学生自我总结
2014/01/21 职场文书
中秋节主持词
2014/04/02 职场文书
英文推荐信格式范文
2014/05/09 职场文书
运动会口号8字
2014/06/07 职场文书
公司优秀员工获奖感言
2014/08/14 职场文书
讲文明懂礼貌演讲稿
2014/09/11 职场文书
农村党支部书记司法四风问题对照检查材料
2014/09/26 职场文书
2015年打非治违工作总结
2015/04/02 职场文书
关于成立领导小组的通知
2015/04/23 职场文书