useState和useRef初始值在每次重新渲染时都会被计算

6

我晚了解到的一件事情:

const [object, setObject] = useState(new SomeObject());

在这里,我们在每次重新渲染时构造一个SomeObject的实例。如果是组件的初始渲染,则返回到object,否则就被丢弃。
不管传入的是什么作为初始参数,都会被重复评估和丢弃。它还必须是纯净的,因为重新渲染可能会在任意时间间隔和任意数量上发生。考虑到构建一些对象或大型数组可能非常昂贵,这不是有点次优吗?
这里的解决方案是什么?我是否误解了什么,或者React中这样一个基本功能的实现方式如此次优?
1个回答

9
你可以将一个函数传递给useState钩子,以使你的值延迟初始化

例如:
const [state, setState] = useState(() => new SomeObject());

3
如果初始状态本质上是一个函数,那么你需要这样写 () => () => new SomeObject() 吗?但是这对于 useRef 不可行,我认为它应该可行,因为同样的原理适用于它。 - Nordling Art

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接