为什么我们不能在 mobx-react 中使用 React.useMemo 来保持对状态对象的引用?

问题描述

目前我的项目仍在使用 mobx@4 和 mobx-react@6,我在文档中发现了这个警告:

公平警告。永远不要使用 React.useMemo 来保持对状态对象的引用。它可能会被 React 随机丢弃,您可能会丢失数据。(mobx-react documentation)

我看不懂,谁能帮忙举个例子和原因?

解决方法

引自 React 文档:

您可以依赖 useMemo 作为性能优化,而不是语义保证。将来,React 可能会选择“忘记”一些先前记忆的值并在下一次渲染时重新计算它们,例如释放屏幕外组件的内存。编写您的代码,使其在不使用 useMemo 的情况下仍能正常工作 — 然后添加它以优化性能。

基本上 React 可以随时重新实例化记忆值,如果它愿意,你将失去整个 Store,因为它将使用默认参数重新创建。

现在可能不会这样做,但最好不要将 memo 用于持久值,这样在迁移到 React 的未来版本时就不会被迫进行重构。

链接:https://reactjs.org/docs/hooks-reference.html#usememo