【发布时间】:2020-05-14 18:08:00
【问题描述】:
这是我的第一个 React Context 实现。我正在使用 Gatsby,在我的 layout.js 中添加了成功传递给消费者的上下文(带有对象和处理函数):
import AppContext from "./AppContext"
const Layout = ({ children }) => {
let doAuthenticate = () => {
authState = {
isAuth: authState.isAuth === true ? false : true,
}
}
let authState = {
isAuth: false,
doAuthenticate: doAuthenticate
}
return (
<>
<AppContext.Provider value={authState}>
<main>{children}</main>
</AppContext.Provider>
</>
)
我在 Consumer 中成功执行了函数:
<AppContext.Consumer>
{ value =>
<button onClick={value.doAuthenticate}Sign in</button>
}
</AppContext.Consumer>
我还看到doAuthenticate 中的值已成功更新。
但是,正在侦听 Provider 的另一个 Consumer 不会更新该值。为什么?
【问题讨论】:
-
你是说另一个组件没有获得价值,我说得对吗?
-
是的,另一个组件没有获取到值
-
你可以通过
isAuth: authState.isAuth !== true简化你的isAuth: authState.isAuth === true ? false : true, -
注意简化 - 谢谢
标签: javascript reactjs gatsby react-context