问题描述
目前我的项目仍在使用 mobx@4 和 mobx-react@6,我在文档中发现了这个警告:
公平警告。永远不要使用 React.useMemo 来保持对状态对象的引用。它可能会被 React 随机丢弃,您可能会丢失数据。(mobx-react documentation)
我看不懂,谁能帮忙举个例子和原因?
解决方法
引自 React 文档:
您可以依赖 useMemo 作为性能优化,而不是语义保证。将来,React 可能会选择“忘记”一些先前记忆的值并在下一次渲染时重新计算它们,例如释放屏幕外组件的内存。编写您的代码,使其在不使用 useMemo 的情况下仍能正常工作 — 然后添加它以优化性能。
基本上 React 可以随时重新实例化记忆值,如果它愿意,你将失去整个 Store,因为它将使用默认参数重新创建。
现在可能不会这样做,但最好不要将 memo 用于持久值,这样在迁移到 React 的未来版本时就不会被迫进行重构。