blog
blog copied to clipboard
useMemo和useCallback的优化
function Child({ onButtonClick, data }) {
console.log('Child Render')
return (
<button onClick={onButtonClick}>{data.number}</button>
)
}
Child = memo(Child)
function App() {
const [number, setNumber] = useState(0)
const [name, setName] = useState('hello') // 表单的值
const addClick = useCallback(() => setNumber(number + 1), [number])
const data = useMemo(() => ({ number }), [number])
return (
<div>
<input type="text" value={name} onChange={e => setName(e.target.value)} />
<Child onButtonClick={addClick} data={data} />
</div>
)
}
export default App;
但是大多数场景下,更新是没有必要的,我们可以借助useCallback来返回函数,然后把这个函数作为props传递给子组件;这样,子组件就能避免不必要的更新。
前提是子组件必须使用Memo处理之后
在 React 应用中,当某个组件的状态发生变化时,它会以该组件为根,重新渲染整个组件子树。(虽然有Diff可以避免DOM回流,但是这个递归过程是耗时的,所以优化是有必要的)