【发布时间】:2021-08-23 16:46:59
【问题描述】:
在下面的代码中,按键事件检测器通过useEffect 实现,它尝试通过useReducer 函数更新index。但是,console.log 输出似乎并未显示更新有效,即使 button 组件的值更新。
另一方面,当单击按钮时,index 变量似乎按照console.log 的指示更新,button 的内容也按预期更新。
为什么会有这样的差异 - 如果我需要在按键后访问更新的 index 变量,我该怎么做?
代码如下:
const { useEffect, useReducer } = React;
const indexReducer = (state, action) => {
if (action === "decrease") {
return state-1
} else if (action === "increase") {
return state+1
} else if (action === "reset") {
return 0
}
}
function App() {
const [counter, setCounter] = useReducer(indexReducer, 0)
const incrementCounter = () => {
console.log(counter)
setCounter("increase")
}
useEffect(() => {
document.addEventListener("keydown", incrementCounter, false);
return () => {
document.removeEventListener("keydown", incrementCounter, false);
};
}, []);
return (
<div className="App">
<button onClick={incrementCounter}>{"COUNT: " + counter}</button>
</div>
);
}
ReactDOM.render(<App />, document.body);
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/17.0.0/umd/react.production.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react-dom/17.0.0/umd/react-dom.production.min.js"></script>
【问题讨论】:
标签: javascript reactjs use-effect use-reducer