在此视频中,Dan提取了useDocumentTitle自定义钩子,但是我发现自定义钩子触发器多次出现,有时是不必要的。问题是仅在关键道具发生变化时如何触发useEffect函数?
可以这样实现,而无需使用自定义钩子:
useEffect(() => {
console.log('useDocumentTitle ')
document.title = myTitle);
}, [someProp])
但是如何使用自定义钩子呢?
https://youtu.be/dpw9EHDh2bM?t=2969
最佳答案
您可以简单地将键作为单独的参数传递,并在自定义钩子中获取您上面使用的代码。
function useCustomHook({someProp, myTitle}) {
useEffect(() => {
console.log('useDocumentTitle ')
document.title = myTitle);
}, [someProp])
}
您将使用它像:
const customHookOptions = {someProp: props.key, myTitle: 'the title'}
useCustomHook(customHookOptions)
您可以做的另一件事是仅在使用
react.memo()
https://reactjs.org/docs/react-api.html#reactmemo更改道具时重新渲染整个组件还有一个挂钩
useMemo
,在这里它可以进行繁重的工作https://reactjs.org/docs/hooks-reference.html#usememo