有关useCallback及其使用的文章已有,但在大型项目中难以理解何时开始使用它。
因此,如果为每个使用案例使用它,是否会影响应用程序的性能。
有关useCallback及其使用的文章已有,但在大型项目中难以理解何时开始使用它。
因此,如果为每个使用案例使用它,是否会影响应用程序的性能。
useCallback
和useMemo
是帮助程序员添加额外的依赖检查层以确保同步的辅助Hooks。通常你会使用useCallback
来确保一个稳定的签名给一个prop
,这个prop
的变化是已知的,但React并不知道。
例如,通过props
传递的function
(引用类型)
const Component = ({ setParentState }) =>{
useEffect(() => setParentState('mounted'), [])
}
setParentState
作为React要检查的依赖项。const Component = ({ setParentState }) =>{
useEffect(() => setParentState('mounted'), [setParentState])
}
setParentState
是一个函数,每次调用Component
函数时都会重新创建。你知道setParentState
的签名不会随着时间改变,所以告诉React是安全的。通过将原始助手包装在useCallback
中,您正在做到这一点(通过添加另一个依赖项检查层)。const Component = ({ setParentState }) =>{
const stableSetter = useCallback(() => setParentState(), [])
useEffect(() => setParentState('mounted'), [stableSetter])
}
请看这里。现在React
知道stableSetter
在生命周期内不会改变其签名,因此效果不需要不必要地运行。
另外,useCallback
也像useMemo
一样用于优化昂贵的函数调用(记忆化)。
useCallback
的两个主要目的是:
优化依赖于引用相等性以防止不必要渲染的子组件。 Font
记忆昂贵的计算计算
有什么缺点/性能问题吗?
useCallback
主要用于通过仅在需要时更改内容来优化性能。它通过添加类似于useEffect
的依赖项层(类似于React
本身知道DOM中的某些内容必须如何更改)来实现这一点,但与每种性能优化技术一样,如果您填充整个应用程序都是不必要的useCallback
,useMemo
,React.memo
,性能将反向。
因此,关键是明智地使用,仔细选择哪些需要具有稳定签名,哪些不需要。
useCallback
/useMemo
,性能会变得更差? - undefined