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

Joh*_*ith 3 javascript reactjs react-hooks

有一件事我迟到了:

const [object, setObject] = useState(new SomeObject());
Run Code Online (Sandbox Code Playgroud)

在这里,我们SomeObject每次重新渲染时构建一个实例。然后,如果它是组件的初始渲染,则返回到object,否则将被丢弃。

无论作为初始参数传入的任何内容都被一遍又一遍地评估和丢弃。它也最好是纯的,因为重新渲染可以以任意间隔和任意数量发生。鉴于构建一些对象或大型数组可能非常昂贵,这不是有点不理想吗?

这里的解决方案是什么?我是不是误解了什么,或者 React 中这样一个基本功能是以这样一种次优的方式实现的?

CMS*_*CMS 8

您可以将函数传递给useState钩子以延迟初始化您的值。

例如:

const [state, setState] = useState(() => new SomeObject());
Run Code Online (Sandbox Code Playgroud)

  • 如果初始状态实际上是一个函数怎么办?您必须执行 `() => () => new SomeObject()` 吗?另外,这对于“useRef”来说是不可能的,我认为它应该是这样,因为同样的原则也适用于此。 (3认同)