我将 Home 组件包装在以下布局中:
export const DataContext = React.createContext({});
const Layout: React.FunctionComponent = (props) => {
const data = {title: "abc", description: "def"};
return (
<DataContext.Provider value={data}>
{props.children}
</DataContext.Provider>
);
};
我想在我的 Home 组件中使用 useContext 钩子,但它返回一个空对象:
const Home: React.FunctionComponent = () => {
const content = React.useContext(DataContext);
return (
<Layout>
// content data goes here
</Layout>
);
};
我怀疑这是因为我在 Layout 包装器之外定义了上下文变量,它包含上下文提供程序,所以它回落到我定义的上下文的默认值(一个空对象)。但是,即使我在布局提供程序中控制台记录 useContext 挂钩,它也会返回一个空对象:
const Home: React.FunctionComponent = () => {
const content = React.useContext(DataContext);
return (
<Layout>
{console.log(React.useContext(DataContext))}
</Layout>
);
};
知道为什么吗?
原文由 Aiwatko 发布,翻译遵循 CC BY-SA 4.0 许可协议
useContext
将从最接近树的value
Provider
。你的Layout
在里面Home
,这将使Provider
在它下面的树中。你可以让
Home
Layout
孩子,而不是看到它工作。例子