コールバックをコンポーネントに渡すときは、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
ですか? 上記は複数のコールバックを渡す正しい方法ですか? 配列の項目に従ってすべてのコールバックを memioze することは本当に機能し、知っていますか?