【发布时间】:2021-10-28 10:56:53
【问题描述】:
我有一个非常基本的示例,但我无法弄清楚我做错了什么。我有一个非常简单的计数器,我想将其初始状态复制到另一个没有反应性的变量,但不能这样做。
import { useState } from "react";
import "./styles.css";
export default function App() {
const [number, setNumber] = useState({ val: 10 });
const numberAssign = Object.assign({}, number);
const numberJSON = { ...number };
const numberSpread = JSON.parse(JSON.stringify(number));
const clicked = () => {
setNumber({ val: number.val + 1 });
};
return (
<div className="App">
<button onClick={clicked}>Inc</button>
<p>{number.val}</p>
<p>{numberAssign.val}</p>
<p>{numberJSON.val}</p>
<p>{numberSpread.val}</p>
</div>
);
}
单击按钮时所有变量都会递增,但我只希望 number 变量递增。
【问题讨论】:
-
useState将始终返回“最新”状态值——这就是重点。因此,如果您不希望这些变量也获得更新的值,请不要将该值分配给其他变量。 -
所以没有办法从中检索值(没有反应部分)?
-
每次调用 setNumber 时,都会使用更新后的数字值再次调用整个 App 函数。因此,所有代码都使用更新后的值再次评估。如果要复制 initialState ,则需要使用另一个钩子来保持值不变。例如,您可以查看 useMemo 挂钩
-
好的,我去看看,谢谢
-
或者你可以在组件外部初始化数值并在useState中使用它作为初始值。
标签: javascript reactjs typescript use-state