详解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 相关文章推荐
Javascript 面向对象 重载
May 13 Javascript
jQuery.get、jQuery.getJSON、jQuery.post无法返回JSON问题的解决方法
Jul 28 Javascript
jquery弹出层类代码分享
Dec 27 Javascript
jQuery实现鼠标滑过Div层背景变颜色的方法
Feb 17 Javascript
JavaScript学习笔记之ES6数组方法
Mar 25 Javascript
jquery 给动态生成的标签绑定事件的几种方法总结
Feb 24 jQuery
vue实现的组件兄弟间通信功能示例
Dec 04 Javascript
Web安全之XSS攻击与防御小结
Dec 13 Javascript
解决vue单页面应用中动态修改title问题
Jun 09 Javascript
简单了解JavaScript sort方法
Nov 25 Javascript
JS判断数组是否包含某元素实现方法汇总
Jun 24 Javascript
Node.js fs模块原理及常见用途
Oct 22 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
Apache, PHP在Windows 9x/NT下的安装与配置 (一)
2006/10/09 PHP
PHP内置过滤器FILTER使用实例
2014/06/25 PHP
基于php实现七牛抓取远程图片
2015/12/01 PHP
php数组指针操作详解
2017/02/14 PHP
Yii框架小部件(Widgets)用法实例详解
2020/05/15 PHP
JavaScript中的prototype使用说明
2010/04/13 Javascript
解决Extjs 4 Panel作为Window组件的子组件时出现双重边框问题
2013/01/11 Javascript
jquery 面包屑导航 具体实现
2013/06/05 Javascript
JS 按钮点击触发(兼容IE、火狐)
2013/08/07 Javascript
js获取电脑分辨率的思路及操作
2013/11/22 Javascript
jQuery实现可收缩展开的级联菜单实例代码
2013/11/27 Javascript
jquery中toggle函数交替使用问题
2015/06/22 Javascript
深入理解JavaScript中的箭头函数
2015/07/28 Javascript
jquery 实现输入邮箱时自动补全下拉提示功能
2015/10/04 Javascript
JavaScript实现刷新不重记的倒计时
2016/08/10 Javascript
xmlplus组件设计系列之路由(ViewStack)(7)
2017/05/02 Javascript
JS库之ParticlesJS使用简介
2017/09/12 Javascript
react native 仿微信聊天室实例代码
2019/09/17 Javascript
vue实现给div绑定keyup的enter事件
2020/07/31 Javascript
python Django批量导入不重复数据
2016/03/25 Python
python实现飞机大战微信小游戏
2020/03/21 Python
详解PANDAS 数据合并与重塑(join/merge篇)
2019/07/09 Python
Python3 pandas 操作列表实例详解
2019/09/23 Python
Python imread、newaxis用法详解
2019/11/04 Python
原来我一直安装 Python 库的姿势都不对呀
2019/11/11 Python
python定间隔取点(np.linspace)的实现
2019/11/27 Python
Python hashlib加密模块常用方法解析
2019/12/18 Python
深入浅析python 中的self和cls的区别
2020/06/20 Python
python实现简单贪吃蛇游戏
2020/09/29 Python
Python模拟登录和登录跳转的参考示例
2020/10/30 Python
Roots加拿大官网:加拿大休闲服饰品牌
2016/10/24 全球购物
应届大专生求职信
2014/06/26 职场文书
地道战观后感2000字
2015/06/04 职场文书
人生遥控器观后感
2015/06/11 职场文书
详解mysql三值逻辑与NULL
2021/05/19 MySQL
win10电脑双屏显示一个黑屏怎么办?win10电脑双屏显示一个黑屏解决方法
2022/07/15 数码科技