详解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 相关文章推荐
JQuery实现表格中相同单元格合并示例代码
Jun 26 Javascript
jQuery事件之键盘事件(ctrl+Enter回车键提交表单等)
May 11 Javascript
javascript结合fileReader 实现上传图片
Jan 30 Javascript
JavaScript中的getMilliseconds()方法使用详解
Jun 10 Javascript
JavaScript学习小结(7)之JS RegExp
Nov 29 Javascript
jQuery插件MovingBoxes实现左右滑动中间放大图片效果
Feb 28 Javascript
微信小程序中的onLoad详解及简单实例
Apr 05 Javascript
angularjs定时任务的设置与清除示例
Jun 02 Javascript
详解react如何在组件中获取路由参数
Jun 15 Javascript
JS通过调用微信API实现微信支付功能的方法示例
Jun 29 Javascript
创建echart多个联动的示例代码
Nov 23 Javascript
JS的深浅复制详细
Oct 16 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
php在项目中寻找代码的坏味道(综艺命名)
2012/07/19 PHP
php保存二进制原始数据为图片的程序代码
2014/10/14 PHP
iOS10推送通知开发教程
2016/09/19 PHP
在laravel中使用Symfony的Crawler组件分析HTML
2017/06/19 PHP
解密效果
2006/06/23 Javascript
HTML Dom与Css控制方法
2010/10/25 Javascript
java与javascript之间json格式数据互转介绍
2013/10/29 Javascript
Jquery实现鼠标移动放大图片功能实例
2015/03/25 Javascript
jQuery检测某个元素是否存在代码分享
2015/07/09 Javascript
基于jQuery实现表格的查看修改删除
2016/08/01 Javascript
JavaScript比较当前时间是否在指定时间段内的方法
2016/08/02 Javascript
js按条件生成随机json:randomjson实现方法
2017/04/07 Javascript
js学习总结之DOM2兼容处理重复问题的解决方法
2017/07/27 Javascript
使用canvas进行图像编辑的实例
2017/08/29 Javascript
微信小程序webview组件交互,内联h5页面并网页实现微信支付实现解析
2019/08/16 Javascript
使用JS location实现搜索框历史记录功能
2019/12/23 Javascript
Python字符转换
2008/09/06 Python
python命令行参数sys.argv使用示例
2014/01/28 Python
Python 异常处理实例详解
2014/03/12 Python
python实现udp数据报传输的方法
2014/09/26 Python
Python+selenium实现截图图片并保存截取的图片
2018/01/05 Python
一篇文章读懂Python赋值与拷贝
2018/04/19 Python
对PyQt5基本窗口控件 QMainWindow的使用详解
2019/06/19 Python
Python 共享变量加锁、释放详解
2019/08/28 Python
python numpy数组中的复制知识解析
2020/02/03 Python
Python单例模式的四种创建方式实例解析
2020/03/04 Python
无需JS和jQuery代码实现CSS3鼠标浮动放大图片
2016/11/21 HTML / CSS
英国著名国际平价时尚男装品牌:Topman
2016/08/27 全球购物
会计电算化专业应届大学生求职信
2013/10/22 职场文书
环境整治工作方案
2014/05/18 职场文书
欢迎横幅标语
2014/06/17 职场文书
党员个人查摆剖析材料
2014/10/16 职场文书
2014年德育工作总结
2014/11/20 职场文书
六五普法学习心得体会
2016/01/21 职场文书
Golang中interface{}转为数组的操作
2021/04/30 Golang
Spring Boot两种全局配置和两种注解的操作方法
2021/06/29 Java/Android