详解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 1.4 中的Ajax问题
Jan 23 Javascript
jQuery 学习第七课 扩展jQuery的功能 插件开发
May 17 Javascript
js操作输入框中选择内容兼容IE及其他主流浏览器
Apr 22 Javascript
jQuery控制的不同方向的滑动(向左、向右滑动等)
Jul 18 Javascript
浅谈javascript中createElement事件
Dec 05 Javascript
jquery中ajax使用error调试错误的方法
Feb 08 Javascript
浅谈Javascript数组索引
Jul 29 Javascript
JavaScript中的return语句简单介绍
Dec 07 Javascript
简单的jQuery banner图片轮播实例代码
Mar 04 Javascript
全面解析Angular中$Apply()及$Digest()的区别
Aug 04 Javascript
Vue动态组件实例解析
Aug 20 Javascript
JavaScript实现区块链
Mar 14 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
CPU步进是什么意思?i3-9100F B0步进和U0步进区别知识科普
2020/03/17 数码科技
php实现批量下载百度云盘文件例子分享
2014/04/10 PHP
asp 取文本框名称代码
2008/12/02 Javascript
onkeypress字符按键兼容所有浏览器使用介绍
2013/04/24 Javascript
javascript模拟订火车票和退票示例
2014/04/24 Javascript
jQuery实现鼠标滑过链接控制图片的滑动展开与隐藏效果
2015/10/28 Javascript
jQuery实现将div中滚动条滚动到指定位置的方法
2016/08/10 Javascript
AngularJs bootstrap搭载前台框架——js控制部分
2016/09/01 Javascript
微信小程序 Audio API详解及实例代码
2016/09/30 Javascript
浅谈jquery上下滑动的注意事项
2016/10/13 Javascript
Javascript的动态增加类的实现方法
2016/10/20 Javascript
关于在vue-cli中使用微信自动登录和分享的实例
2017/06/22 Javascript
three.js 入门案例详解
2018/01/23 Javascript
Vue 解决通过this.$refs来获取DOM或者组件报错问题
2020/07/28 Javascript
[43:57]LGD vs Mineski 2018国际邀请赛小组赛BO2 第二场 8.19
2018/08/21 DOTA
Python使用MYSQLDB实现从数据库中导出XML文件的方法
2015/05/11 Python
python实现马耳可夫链算法实例分析
2015/05/20 Python
浅谈Python的Django框架中的缓存控制
2015/07/24 Python
Python 实现随机数详解及实例代码
2017/04/15 Python
Python+PIL实现支付宝AR红包
2018/02/09 Python
pip安装时ReadTimeoutError的解决方法
2018/06/12 Python
pandas筛选某列出现编码错误的解决方法
2018/11/07 Python
使用Python和OpenCV检测图像中的物体并将物体裁剪下来
2019/10/30 Python
Python udp网络程序实现发送、接收数据功能示例
2019/12/09 Python
AUC计算方法与Python实现代码
2020/02/28 Python
Python无头爬虫下载文件的实现
2020/04/02 Python
Flask-SocketIO服务端安装及使用代码示例
2020/11/26 Python
印度网上药店:1mg
2017/10/13 全球购物
澳大利亚厨房和家用电器购物网站:Bing Lee
2021/01/11 全球购物
《一件运动衫》教学反思
2014/02/19 职场文书
学校领导四风问题整改措施思想汇报
2014/10/09 职场文书
作文评语怎么写
2014/12/25 职场文书
西安兵马俑导游词
2015/02/02 职场文书
培训学校2015年度工作总结
2015/07/20 职场文书
python基于opencv批量生成验证码的示例
2021/04/28 Python
springboot 启动如何排除某些bean的注入
2021/08/02 Java/Android