将回调传递给组件时,我应该使用useCallback
钩子返回一个记忆化的回调(以防止不需要的渲染):
import doSomething from "./doSomething";
const FrequentlyRerenders = ({ id }) => {
const onEvent = useCallback(() => doSomething(id), [id]);
return (
<ExpensiveComponent onEvent={ onEvent } />
);
};
但是如果我使用地图呢?例如:
import doSomething from "./doSomething";
const FrequentlyRerendersMap = ({ ids }) => {
return ids.map(id => {
const onEvent = useCallback(() => doSomething(id), [id]);
return (
<ExpensiveComponent key={id} onEvent={ onEvent } />
);
});
};
我应该如何正确使用useCallback
?以上是传递多个回调的正确方法吗?它真的有效并且知道根据数组的一项来记忆每个回调吗?