问题

上图是一个react形成的嵌套组件树,如果需要跨组件传值,该怎么办呢?如果使用 props 一层一层的往下面传,就很麻烦
可以通过Context,就可以在组件树之间进行数据传递
一.hook跨组件传值
实现步骤
- 使用
createContext创建Context对象
- 在顶层组件通过
Provider提供数据
- 在底层组件通过
useContext函数获取数据
代码实现
import React, { createContext,useState,useContext } from "react";
const Context = createContext();
function DemoA() {
const count = useContext(Context);
return (
<div>
DemoA
顶层传递来的数据:{count}
<DemoC />
</div>
);
}
function DemoC() {
const count = useContext(Context);
return <div>DemoC
顶层传递的数据:{count}
</div>;
}
function ConText() {
const [count,setCount] = useState(0);
return (
<Context.Provider value={count}>
<div>
<h1>context</h1>
<button onClick={()=>setCount(count+1)}>{count}</button>
<hr />
<DemoA />
</div>
</Context.Provider>
);
}

二.类组件跨组件通信
实现步骤
- 导入
createContext 方法并执行
- 使用
Proveider 包裹根组件
- 通过
Consumer 使用数据
代码实现
import React, { createContext } from "react";
const { Provider, Consumer } = createContext()
function DemoA() {
return (
<div>this is DemoA
<DemoC />
</div>
)
}
function DemoC() {
return (
<div>
this is DemoC <br />
{/* 3.通过 Consumer 使用数据 */}
<Consumer>
{value => <span>{value}</span>}
</Consumer>
</div>
)
}
class App extends React.Component {
state = {
message: "this is message"
}
render() {
return (
<Provider value={this.state.message}>
<div>
<DemoA />
</div>
</Provider>
)
}
}
export default App
