Dependency Arrays
RE · useMemo & useCallbacksyntax
// All values from component scope used inside must be listed
useCallback(() => fn(a, b), [a, b]);
useMemo(() => compute(x), [x]);example
function ChatRoom({ roomId, serverUrl }) {
// Recreated only when roomId or serverUrl change
const connect = useCallback(() => {
const ws = new WebSocket(`${serverUrl}/rooms/${roomId}`);
ws.onopen = () => console.log('Connected to', roomId);
return ws;
}, [roomId, serverUrl]);
useEffect(() => {
const ws = connect();
return () => ws.close();
}, [connect]);
return <div>Chat: {roomId}</div>;
}Note Missing a dependency leads to stale closures. Including an unnecessary one causes pointless recalculations. Use the exhaustive-deps lint rule (eslint-plugin-react-hooks) to catch mistakes automatically.