【发布时间】:2020-03-28 18:56:37
【问题描述】:
我正在尝试使用 React 上下文 api,
请检查someComponent 我传递点击事件的函数(updateName 函数)然后从GlobalProvider 函数更新state.name 值
更新state.name 后,它会反映在浏览器上,但不会在控制台中获取更新值(我在点击函数行下方调用了控制台以获取下面的更新值)
为什么不在该控制台中获取更新的值,但它正在渲染内部(在浏览器上)?
示例代码
App function
<GlobalProvider>
<Router>
<ReactRouter />
</Router>
</GlobalProvider>
=== 2
class GlobalProvider extends React.Component {
state = {
name: "Batman"
};
render() {
return (
<globalContext.Provider
value={{
name: this.state.name,
clickme: () => { this.setState({ name: "Batman 2 " }) }
}}
>
{this.props.children}
</globalContext.Provider>
);
}
}
export default GlobalProvider;
=== 3
const SomeComponent = () => {
const globalValue = useContext(globalContext);
const updateName = ()=> {
globalValue.clickme();
console.log(globalValue.name ) //*** Here is my concern - not getting updated value here but , getting updated value in browser
}
return (
<div onClick={(e)=> updateName(e) }>
{globalValue.name}//*** In initial load display - Batman, after click it display Batman 2
</div>) }
【问题讨论】:
-
事件循环总是落后一个滴答,所以你需要使用异步调用来使其工作。只需用 setTime() 包装 console.log 即可查看。
标签: javascript reactjs react-context