详解react组件通讯方式(多种)


Posted in Javascript onMay 06, 2020

1、父组件向子组件传值

父组件向子组件传值一般采用props属性传递

父组件:

import React from 'react'
import Child from './Child'

const dataList = [
 { id: '001', value: '张三' },
 { id: '002', value: '李四' }
]

const Parent = props => {
 return (
  <ul>
   <Child dataList={dataList}></Child>
  </ul>
 )
}

export default Parent

子组件:

import React from 'react'

const Child = props => {
 return (
  <React.Fragment>
   {
    props.dataList.map(item => <li key={item.id}>{item.value}</li>)
   }
  </React.Fragment>
 )
}

export default Child

详解react组件通讯方式(多种)

2、子组件向父组件传值

子组件调用父组件传过来的回调函数来更改父组件的state

父组件

import React, { useState } from 'react'
import Child from './Child'

const Parent = props => {
 const [count, setCount] = useState(0)

 return (
  <Child count={count} setCount={setCount}></Child>
 )
}

export default Parent

子组件

import React from 'react'

const Child = props => {
 return (
  <React.Fragment>
   <button onClick={() => {props.setCount(props.count-1)}}>-</button>
   <span>{props.count}</span>
   <button onClick={() => {props.setCount(props.count+1)}}>+</button>
  </React.Fragment>
 )
}

export default Child

详解react组件通讯方式(多种)

3、跨级组件传值(祖孙组件)

context是一个全局变量,像是一个大容器,在任何地方都可以访问到,我们可以把要通信的信息放在context上,然后在其他组件中可以随意取到;
但是React官方不建议使用大量context,尽管他可以减少逐层传递,但是当组件结构复杂的时候,我们并不知道context是从哪里传过来的;而且context是一个全局变量,全局变量正是导致应用走向混乱的罪魁祸首.

父组件

import React, { useState } from 'react'
import Child from './Child'

export const MyContext = React.createContext('hello')

const Parent = props => {
 return (
  <MyContext.Provider value="world">
   <Child />
  </MyContext.Provider>
 )
}

export default Parent

子组件

import React from 'react'
import Son from './Son'

const Child = props => {
 return (
  <Son />
 )
}

export default Child

孙组件

import React from 'react'
import { MyContext } from './Parent'

export default class Son extends React.Component {
 render() {
  return (
   <MyContext.Consumer>
    {
     context => <div>{context}</div>
    }
   </MyContext.Consumer>
  )
 }
}

详解react组件通讯方式(多种)

参考:
https://blog.csdn.net/xingfuzhijianxia/article/details/86151243
https://www.cnblogs.com/qinney1109/p/11202085.html

到此这篇关于详解react组件通讯方式的文章就介绍到这了,更多相关react组件通讯内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Javascript 相关文章推荐
点击广告后才能获得下载地址
Oct 26 Javascript
JavaScript Event学习第九章 鼠标事件
Feb 08 Javascript
读jQuery之九 一些瑕疵说明
Jun 21 Javascript
浅析offsetLeft,Left,clientLeft之间的区别
Nov 30 Javascript
Jquery简单实现GridView行高亮的方法
Jun 15 Javascript
Bootstrap表单组件教程详解
Apr 26 Javascript
使用Vue.js创建一个时间跟踪的单页应用
Nov 28 Javascript
Bootstrap学习笔记之进度条、媒体对象实例详解
Mar 09 Javascript
详细讲解vue2+vuex+axios
May 27 Javascript
基于vue 实现token验证的实例代码
Dec 14 Javascript
element-ui中的select下拉列表设置默认值方法
Aug 24 Javascript
JS实现购物车基本功能
Nov 08 Javascript
Node.js API详解之 os模块用法实例分析
May 06 #Javascript
js实现无缝轮播图特效
May 09 #Javascript
js实现上传按钮并显示缩略图小轮子
May 04 #Javascript
js代码实现轮播图
May 04 #Javascript
原生js实现轮播图特效
May 04 #Javascript
jquery实现手风琴案例
May 04 #jQuery
autojs 蚂蚁森林能量自动拾取即给指定好友浇水的实现方法
May 03 #Javascript
You might like
zend framework重定向方法小结
2016/05/28 PHP
PHP解压ZIP文件到指定文件夹的方法
2016/11/17 PHP
PHP时间日期增减操作示例【date strtotime实现加一天、加一月等操作】
2018/12/21 PHP
IE iframe的onload方法分析小结
2010/01/07 Javascript
JavaScript对象创建及继承原理实例解剖
2013/02/28 Javascript
extjs ColumnChart设置不同的颜色实现代码
2013/05/17 Javascript
from 表单提交返回值用post或者是get方法实现
2013/08/21 Javascript
一个js控制的导航菜单实例代码
2013/12/03 Javascript
js 判断控件获得焦点的示例代码
2014/03/04 Javascript
jQuery实现向下滑出的平滑下拉菜单效果
2015/08/21 Javascript
使用jquery动态加载Js文件和Css文件
2015/10/24 Javascript
Jquery获取当前城市的天气信息
2016/08/05 Javascript
webpack写jquery插件的环境配置
2017/12/21 jQuery
关闭Vue计算属性自带的缓存功能方法
2018/03/02 Javascript
Vue中UI组件库之Vuex与虚拟服务器初识
2019/05/07 Javascript
Node.js 实现抢票小工具 &amp; 短信通知提醒功能
2019/10/22 Javascript
javascript使用链接跨域下载图片
2019/11/01 Javascript
vue 解决computed修改data数据的问题
2019/11/06 Javascript
谈谈如何手动释放Python的内存
2016/12/17 Python
python一键升级所有pip package的方法
2017/01/16 Python
python用户管理系统的实例讲解
2017/12/23 Python
python3.6.3+opencv3.3.0实现动态人脸捕获
2018/05/25 Python
利用python-pypcap抓取带VLAN标签的数据包方法
2019/07/23 Python
python实现简单图书管理系统
2019/11/22 Python
详解CSS3中强大的filter(滤镜)属性
2017/06/29 HTML / CSS
美国花园雕像和家居装饰网上商店:Design Toscano
2019/03/09 全球购物
size?丹麦官网:英国伦敦的球鞋精品店
2019/04/15 全球购物
Yves Rocher捷克官方网站:植物化妆品的创造者
2019/07/31 全球购物
戴森西班牙官网:Dyson西班牙
2020/02/04 全球购物
大学生简历中个人的自我评价
2013/10/06 职场文书
大学生学期自我鉴定
2014/03/19 职场文书
社区助残日活动总结
2014/08/29 职场文书
2014年移动公司工作总结
2014/12/08 职场文书
龙门石窟导游词
2015/02/02 职场文书
2016感恩母亲节校园广播稿
2015/12/17 职场文书
Java数据开发辅助工具Docker与普通程序使用方法
2021/09/15 Java/Android