【发布时间】:2020-01-18 09:42:55
【问题描述】:
我正在玩 React Hooks。单击按钮时,我想增加一个计数器。计数器递增后,应用程序不应允许进一步递增,直到 clicked 重置为 false。
我想出了这个:
function App() {
const [counter, setCounter] = useState(0);
const [clicked, setClicked] = useState(false);
useEffect(() => {
if (clicked) {
setCounter(counter + 1);
setTimeout(() => {
setClicked(false);
}, 2000);
}
}, [clicked]);
return (
<div className="App">
<p>Clicked: {String(clicked)}</p>
<p>Counter: {counter}</p>
<button type="button" onClick={() => setClicked(true)}>
Click me
</button>
</div>
);
}
它确实有效。但是 React 抱怨以下警告:
React Hook useEffect 缺少一个依赖项:'counter'。任何一个 包含它或删除依赖数组。你也可以做一个 功能更新 'setCounter(c => ...)' 如果你只需要'counter' 'setCounter' 调用。 (react-hooks/exhaustive-deps)
当我将计数器添加到依赖项时,useEffect 将进入无限循环,因为 clicked 为真,并且 setCounter 是从 useEffect 中调用的。
我只希望计数器在 clicked 从 false 变为 true 时递增。如果依赖项列表仅包含 clicked,则此方法有效,但 React 会抱怨这一点。
【问题讨论】:
-
只是一个问题,
setCounter(counter => counter + 1)这个有什么问题? -
the application should not allow further increments until clicked is reset to false这是什么时候发生的?是否需要超时请求?
标签: reactjs