如果父元件所传递的 props 包含 Object,
则在元件因状态改变而 re-render 时,
Object 的记忆体位址也会随之重新分配。
useCallback 则能够在特定条件下
保留原本的 Object,
防止其记忆体位址参考
因 re-render 而被改变。
因此搭配 React.memo 使用时,
能够避免因传入元件的 callback
记忆体位址不同而强迫重新渲染的问题。
const memorizedValue = useCallback(callback, array)
const memoizedCallback = useCallback(
() => {
doSomething(a, b);
},
[a, b],
);
useCallback 会帮我们记住
callback 函式的记忆体位置,
在 React 元件重新渲染时,
若 dependencies array 中的值没有被修改,
就沿用上次的 reference。
const List = ({getItems}) => {
const [item, setItems] = useState([])
useEffect(() => {
setItems(getItems())
}, [getItems])
return item.map(item => <span key={item}>{item} , </span>)
}
const App = () => {
const [number, setNumber] = useState(0);
// very slow function
const getItems = useCallback(() => {
return [number, number + 1, number + 2]
}, [number])
const changeHandler = e => {
setNumber(e.target.value)
}
return (
<>
<input type='number' value={number} onChange={changeHandler} />
<List getItems={getItems} ></List>
</>
)
};
useCallback(fn, depsArr)
等同於
useMemo(() => fn, depsArr)
一天过一天,终於走到了今天(撒花~ 从最一开始的 Pre-Start 篇章:带读者们认识 WYSI...
今天要继续讲转职工作使用到的工具以及遇到的一些问题及处理方式。 公司的专案在制作图表有使用到Cube...
一、使用变数的理由 变数(Variable),顾名思义就是 『可以变的数据』 ,可以让我们重复使...
--哇.这是什麽资料库,我怎麽没这个语法. drop table if exists delme c...
今天的 Home 目录没有修改,https://github.com/simba-fs/2021-...