Context
- React.createContext(): 用于创建一个上下文
- Provider: 用于为组件树提供特定的上下文
- Consumer: 在组件树内获取特定的上下文内容
Context简单的使用方法
import React, { Component } from "react";
// 创建两个不同的上下文
const ComponentTreeParam = React.createContext();
// 这两个不同的上下文通过不同的属性名进行区分
const ComponentTreeParamV2 = React.createContext();
class Inner extends Component {
list(elem) {
console.log(elem);
return elem.map((x, index) => (
<div key={index}>
姓名:{x.name} / 年龄: {x.age}
</div>
));
}
render() {
return (
<div>
// 直接这里的就是provider传入的参数
// 然后返回一个jsx就可以插入dom中
<ComponentTreeParam.Consumer>
{elem => this.list(elem)}
</ComponentTreeParam.Consumer>
<div>恭喜发财</div>
<ComponentTreeParamV2.Consumer>
{elem => this.list(elem)}
</ComponentTreeParamV2.Consumer>
<br />
// 将多个不同的context嵌套在一起使用
<ComponentTreeParam.Consumer>
{theme1 => {
return (
<ComponentTreeParamV2>
{theme2 => {
return [...this.list(theme1), ...this.list(theme2)];
}}
</ComponentTreeParamV2>
);
}}
</ComponentTreeParam.Consumer>
</div>
);
}
}
class ToolBar extends Component {
render() {
return <Inner />;
}
}
class Context extends Component {
render() {
const collections = [
{ name: "Zhangsan", age: 18 },
{ name: "LiSi", age: 20 }
];
const collections2 = [
{ name: "Zhangsan", age: 35 },
{ name: "LiSi", age: 38 }
];
return (
// 将collection作为Provider的值传入该组件树
<ComponentTreeParam.Provider value={collections}>
<div>
// 将collection2作为Provider的值传入该组件树
<ComponentTreeParamV2.Provider value={collections2}>
<ToolBar />
</ComponentTreeParamV2.Provider>
</div>
</ComponentTreeParam.Provider>
);
}
}
export default Context;