【发布时间】:2020-01-31 05:45:54
【问题描述】:
这是问题所在:我试图在单击按钮时调用 2 个函数。这两个函数都会更新状态(我正在使用 useState 挂钩)。第一个函数将 value1 正确更新为“new 1”,但在 1s (setTimeout) 后第二个函数触发,并将 value 2 更改为“new 2”但是!它将 value1 设置回“1”。为什么会这样? 提前致谢!
import React, { useState } from "react";
const Test = () => {
const [state, setState] = useState({
value1: "1",
value2: "2"
});
const changeValue1 = () => {
setState({ ...state, value1: "new 1" });
};
const changeValue2 = () => {
setState({ ...state, value2: "new 2" });
};
return (
<>
<button
onClick={() => {
changeValue1();
setTimeout(changeValue2, 1000);
}}
>
CHANGE BOTH
</button>
<h1>{state.value1}</h1>
<h1>{state.value2}</h1>
</>
);
};
export default Test;
【问题讨论】:
-
你能在
changeValue2开头记录状态吗? -
我强烈建议您将对象拆分为对
useState的两个单独调用,或者改用useReducer。 -
是的 - 第二个。只需使用两次调用 useState()
-
const [state, ...],然后在setter中引用它...它会一直使用相同的状态。 -
最佳行动方案:使用 2 个单独的
useState调用,每个“变量”调用一个。
标签: javascript reactjs react-hooks