整体思路
- 第一步:创建一个 Context 对象(可以理解为一个 “数据容器”)。
- 第二步:在 顶层组件(提供数据的组件)中,用
Context.Provider 包裹子组件(A),并通过 value 属性传递需要共享的数据(msg)。 - 第三步:在 B 组件中,通过
useContext 钩子(React 18 推荐方式)获取 Context 中的数据。
// 导入React核心依赖
import { createContext, useContext } from 'react';
// 第一步:创建Context对象(建议单独抽离文件,这里为了演示写在一起)
// createContext可以传默认值(当组件不在Provider包裹范围内时生效)
const MsgContext = createContext('默认值');
// A组件(中间层,无需处理Context,仅作为容器)
function A(){
return (
<div>
<h3>A组件</h3>
<B /> {/* 嵌套B组件 */}
</div>
);
};
// B组件(消费Context数据)
function B() {
// 第三步:消费Context数据 - 使用useContext钩子获取
const msg = useContext(MsgContext);
return (
<div>
this is B compnent:{msg}
</div>
);
};
// App组件(顶层,提供Context数据)
function App() {
// 要传递的变量
const msg = 'this is App msg';
return (
<div>
<MsgContext.Provider value={msg}>
<A /> {/* A组件在Provider范围内,其内部的B组件就能拿到数据 */}
</MsgContext.Provider>
</div>
);
};
export default App;