context祖孙传值是什么?
1、父组件
import React from "react";
import LearnContext2 from "./LearnContext2";
const MyContext = React.createContext();
export default class LearnContext extends React.Component {
state = {
num: 1,
};
/**
* 接收所有层级的子组件返回的消息
* @param {} msg
*/
getChildData = (msg) => {
console.log(msg);
};
render() {
return (
<div>
<div>父级组件</div>
<MyContext.Provider
/**
* 给所有的子级组件传一个num的值
* 并且传一个方法 让他们也可以和父级组件通讯
*/
value={{ num: this.state.num, getChildData: this.getChildData }}
>
<LearnContext2></LearnContext2>
</MyContext.Provider>
</div>
);
}
}
2、子组件
import React from "react";
import LearnContext3 from "./learn-context3";
export default class LearnContext2 extends React.Component {
render() {
return (
<div>
<div>子组件</div>
<LearnContext3></LearnContext3>
</div>
);
}
}
3、孙组件
使用 Consumer 接收传下来的context
import React from "react";
import { MyContext } from "./learn-context";
class LearnContext3 extends React.Component {
render() {
return (
<MyContext.Consumer>
{/*
直接使用Consumer
这种方式获取参数
但是这种方式 不方便在render意外的地方使用传下来的参数
*/}
{(context) => (
<div>
<div>孙组件</div>
<div>爷爷——传下来的{context.num}</div>
<button onClick={() => context.onChildHandle('哈喽爷爷')}>给爷爷问声好</button>
</div>
)}
</MyContext.Consumer>
);
}
}
export default LearnContext3;
使用contextType 接收context
import React from "react";
import { MyContext } from "./learn-context";
class LearnContext4 extends React.Component {
// 可以直接在类里面使用static 声明静态属性
static contextType = MyContext
render () {
return (
<div>
<div>孙组件</div>
{/*
当我们把context挂载到当前组件的contextType的时候
就可以直接使用this.context拿到相关的值
*/}
<div>爷爷——传下来的{this.context.num}</div>
<button onClick={() => this.context.onChildHandle('哈喽爷爷')}>给爷爷问声好</button>
</div>
)
}
}
// 也可以直接在这上面进行赋值
LearnContext4.contextType = MyContext
export default LearnContext4
相关推荐HOT
更多>>React.PureComponent 和 React.memo的区别是什么?
1、继承关系React.PureComponent是一个React组件类,可以被继承;而React.memo是一个高阶组件,不能被继承。2、比较方式React.PureComponent使用...详情>>
2023-05-15 17:33:06react-router中有哪些路由模型?
1、HashRouter HashRouter使用URL的哈希部分(即#后面的部分)来匹配路由,它不会向服务器发送请求。例如,URL可以是http://example.com/#/a...详情>>
2023-05-15 17:29:08setState同步还是异步的?
分版本来讲,在 react17 中,setState 是批量执行的,因为执行前会设置 executionContext。但如果在 setTimeout、事件监听器等函数里,就不会设...详情>>
2023-05-09 15:21:20怎么将string字符串转换成byte[]数组?
例如,使用默认字符集转换可以如下所示: 也可以指定字符集: 这将使用UTF-8字符集将字符串转换成字节数组。详情>>
2023-04-25 17:14:58热门推荐
context祖孙传值是什么?
沸React.PureComponent 和 React.memo的区别是什么?
热react-router中有哪些路由模型?
热什么是Concurrent React?
新react17后删除了那些生命周期?为什么?
setState同步还是异步的?
useLayoutEffect和useEffect有哪些不同?
为什么map的时候要加key?
什么是redux?
为什么会出现ref?
防抖和节流是什么?
vue的计算属性,特性,应用是什么?
负载均衡原理是什么?
怎么将string字符串转换成byte[]数组?