https://codesandbox.io/s/react-usecontextuseeffect-stale-data-bug-l81sn
在一个组件中useEffect
,当某个值发生变化时,我会做一些事情。现在它只是一个简单计数器的值,但在现实世界中它将是一个数组,其中删除或添加项目等。稍微复杂一点。
在useEffect
我也有一个调整大小检测。同样,在这个例子中不是很有趣。
const App = props => {
const [count, dispatch] = useReducer((state, action) => {
switch (action.type) {
case 'INCREMENT':
return state + 1;
case 'DECREMENT':
return state - 1;
default:
return state;
}
}, 0);
return (
<CountContext.Provider value={{ count, dispatch }}>
<div className="App">
<h1>App</h1>
<Counter />
</div>
</CountContext.Provider>
);
};
const Counter = () => {
const counter = useContext(CountContext);
useEffect(() => {
window.addEventListener('resize', () => {
console.log(counter.count);
})
},[counter])
return (
<div className="Counter">
<p>Counter: {counter.count}</p>
<input
type="button"
value="+"
onClick={() => counter.dispatch({ type: 'INCREMENT' })}
/>
<input
type="button"
value="-"
onClick={() => counter.dispatch({ type: 'DECREMENT' })}
/>
</div>
);
};
问题是,当我调整视口大小时,会console.log(counter.count)
显示所有以前的值: