P粉8348408562023-08-19 00:29:53
是的,这是正确的。每次渲染都会创建一个新的函数,然后新的函数会被缓存的函数所替代。
加速并不是因为跳过了创建函数的步骤,而是因为其他代码能够跳过它们自己的工作。这是因为如果它们每次都传递相同的函数,它们就知道没有相关的内容发生了变化。
例如,如果您需要将handleChange
传递给useEffect
的依赖数组中,每次都传递一个稳定的引用非常重要,否则该effect将在每次渲染时重新运行:
useEffect(() => { // ... 使用handleChange做一些事情 }, [handleChange]);
或者,如果handleChange
作为prop传递给一个组件,并且该组件想要使用React.memo
跳过渲染。只有在props没有改变时,才能跳过渲染:
const Parent = () => { const handleChange = useCallback((ev) => { setMsg(ev.target.value); }, []); return <Child handleChange={handleChange}/> } const Child = React.memo(({ handleChange }) => { // ... 使用handleChange做一些事情 })