【发布时间】:2020-08-14 23:50:17
【问题描述】:
根据我的实验,如果您有一个对象作为反应状态 (let [state, setState] = useState({})),并且您执行类似的操作
setState(s => {
s.a = 42;
return s;
})
它不会重新渲染依赖于s.a 的组件。
另一方面,如果你这样做了
setState(s => {...s, a: 42});
它将重新渲染依赖于 s 的任何字段的所有组件。 所以在我看来,它真的只看闭包的返回对象引用是否与它已经拥有的状态相同,并做出二元选择是否重新渲染所有内容。
对吗?
有什么方法可以更新状态,使其仅重新渲染依赖于例如的事物。 s.a?
上下文,如果有帮助的话:我的应用程序需要这个,因为性能变得不切实际。我的应用程序从 API 端点检索 JSON 信息,其中包含描述用户可用于输入数据的输入字段的“字段”列表。用户完成后,应用程序以单个 json 格式提交此数据。因此,所有输入组件都是通过一个单一的功能状态来控制的,该状态为每个字段保存一个属性(有时我需要能够以编程方式更新某些字段)。性能令人望而却步,因为每次用户在其中一个中键入字符时,所有字段(现在很多)都会更新/重新渲染。很遗憾,我无法为每个字段创建新状态,因为事先不知道字段的数量。
【问题讨论】:
标签: javascript reactjs setstate