如何解决我可以在React中使用MobX完全摆脱useCallback和useMemo吗?
当前,我正在使用Redux和提到的用于React项目的钩子。但是,我认为useMemo
和useCallback
很快会很快导致错误(棘手的错误)。据我了解,需要使用这些钩子,以避免不必要的组件重新呈现,因为react正在检查引用的相等性。
我想摆脱上述钩子,让MobX处理所有反应性的东西。我想知道我是否完全可以摆脱它们(useCallback
,useMemo
),因此一切都会自动更新。
- MobX的性能降低吗?
- 甚至有可能用MobX彻底摆脱它们吗?
- UI组件是否也只能在MobX上中继(例如,设置加载布尔值或布尔值以切换模式可见性)?
此外,我读过useContext
不应用于频繁更新。但是,MobX实际上经常与该钩子一起使用(谈论mobx-react-lite
)。因此,使用MobX进行UI更新甚至是个好主意吗?
解决方法
首先,您实际上并不需要那些钩子。
-
useMemo-用于懒惰值,如果您决定放弃它并简单地获取您的值,则不会发生任何事情。
-
useCallback-类似于函数的useMemo,同样,您可以声明函数而无需将其包装在useCallback函数中。
从React useMemo和useCallback
您可以依靠useMemo作为性能优化,而不是语义保证。
useCallback(fn,deps)等同于useMemo(()=> fn,deps)。
在99%的情况下,这些挂钩用于优化,它们与MobX或Redux无关,您完全不能使用它们。 除非您有一个非常特殊的用例,否则StackOverflow中的其他问题都建议您使用它们。
我个人讨厌redux,起初听起来不错,但比您意识到它是一个持续维护的大怪物。
MobX采取了另一种方法来管理应用程序的全局状态,这种方法一开始听起来还不错,但随后您会深入研究并通过对useState的微调来查看实现,以触发forceRender并使用带有可观察包装函数组件的voodoo。
这就是为什么我最近创建了一个简单的反应状态管理程序包,我认为该程序包太简单了,难以理解维护和扩展(我在几个大型应用程序中都使用了这种模式)
它称为react-spear。
我真的很高兴听到任何想法,我认为这种方法使全球状态管理变得非常容易。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。