-
一般用于【祖组件】与【后代组件】间通信
案例:
A,B,C,D四个组件的关系分别为:爷爷,爸爸,儿子,孙子
从A向C传递参数:C组件为类式组件
从A向D传递参数:D组件为函数组件
javascriptimport React, { Component } from 'react' import './index.css' /** * 【祖组件】与【后代组件】间通信 */ // 创建Context容器对象: const MyContext = React.createContext() const {Provider,Consumer} = MyContext export default class A extends Component { state = {name:'sun',age:18} render() { const {name,age} = this.state; return ( <div className='one'> <h5>A组件</h5> <div>我的名字是:{name}</div> {/* 渲染子组件时,外面包裹Provider,通过value属性给后代组件传递参数 */} <Provider value={{name,age}}> <B></B> </Provider> </div> ) } } class B extends Component { render() { return ( <div className='two'> <h5>B组件</h5> <C></C> </div> ) } } /** * 后代组件读取数据 * 方式一:仅使用于类组件 */ class C extends Component { // 第一步:声明接受context static contextType = MyContext; render() { return ( <div className='three'> <h5>C组件</h5> {/* 第二步:读取context中的value数据 */} <div>C组件从A组件拿到的名字是:{this.context.name}</div> <D></D> </div> ) } } /** * 后代组件读取数据 * 方式二:函数组件与类组件都可以 */ function D(){ return( <div className='four'> <h5>D组件</h5> <div>D组件从A组件拿到的名字是: <Consumer> {value => `${value.name},年龄是:${value.age}。`} </Consumer> </div> </div> ) }样式文件:
javascript.one{ width: 500px; background-color: red; padding: 20px; } .two{ width: 90%; background-color: orange; padding: 20px; } .three{ width: 90%; background-color: yellow; padding: 20px; } .four{ width: 90%; background-color: green; padding: 20px; }运行效果:

react组件间通信之context
种草小幺儿.2023-11-09 8:31
相关推荐
鲨莎分不晴9 分钟前
【实战】老项目焕发新生:从 Webpack 平滑迁移到 Vite 避坑全记录web小白成长日记30 分钟前
从零起步,用TypeScript写一个Todo App:踩坑与收获分享圣心1 小时前
Gemini 模型 介绍huangyiyi666661 小时前
前端-远程多选搜索框不能反显的问题解决敲敲了个代码1 小时前
让 Vant 弹出层适配 Uniapp Webview 返回键AOwhisky1 小时前
Ansible管理变量和事实(管理变量部分) & 部署文件到受管主机摘星编程1 小时前
React Native for OpenHarmony 实战:Accessibility 辅助功能详解小二·2 小时前
Python Web 开发进阶实战:绿色软件工程 —— 构建低能耗、低碳排的可持续应用hhcccchh2 小时前
学习vue第十四天 小白学父组件传递子组件(Props)派大鑫wink2 小时前
【Day32】Tomcat 服务器:安装、配置与 Web 应用部署