跳到主要内容

useContext

React Context 是一种全局管理状态的方法

它可以与 useState Hook 一起使用,比单独使用 useState 更容易地在深层嵌套的组件之间共享状态

问题所在

状态应该由堆栈中需要访问状态的最高父组件持有

为了说明,我们有许多嵌套组件。 堆栈顶部和底部的组件需要访问状态

要在没有 Context 的情况下执行此操作, 我们需要将状态作为“props”传递给每个嵌套组件。 这称为“props 钻井”

实时编辑器
结果
Loading...

即使组件 2-4 不需要状态,它们也必须传递状态,以便它可以到达组件 5


解决方案

解决方案是创建上下文

Create Context

要创建上下文,您必须导入 createContext 并对其进行初始化:

import { useState, createContext } from "react"

const UserContext = createContext()

接下来我们将使用 Context Provider 来包装需要状态 Context 的组件树


Context Provider

在 Context Provider 中包装子组件并提供状态值

function Component1() {
const [user, setUser] = useState("Jesse Hall")
return (
<UserContext.Provider value={user}>
<h1>{`Hello ${user}!`}</h1>
<Component2 user={user} />
</UserContext.Provider>
)
}

现在,这棵树中的所有组件都可以访问用户上下文


使用 useContext Hook

为了在子组件中使用 Context, 我们需要使用 useContext Hook 来访问它

首先,在导入语句中包含 useContext:

import { useState, createContext, useContext } from "react"

然后就可以在所有组件中访问用户 Context 了:

function Component5() {
const user = useContext(UserContext)

return (
<>
<h1>Component 5</h1>
<h2>{`Hello ${user} again!`}</h2>
</>
)
}

完整用例

实时编辑器
结果
Loading...