連続して発火するイベントの処理を減らしたいっ!(React)

例えばscrollの位置を保存するような処理を書こうとすると、連続してイベントが発生してしまって処理が無駄に行われる場合があります。

const [height, setHeight] = useState(0);

// heightが変更された時
useEffect(() => {
  // 保存する
  save(height);
}, [height]);

簡単な対応としてsetTimeoutを追加して500msごとに保存するように変更します。

const [height, setHeight] = useState(0);

// heightが変更された時
useEffect(() => {
  const t = setTimeout(() => {
    // 保存する
    save(height);
  }, 500);

  return () => clearTimeout(t);
}, [height]);