問題一覧に戻る
中級カスタムフック
問題56: useDebounce
入力の遅延処理を行うカスタムフックの実装を学びます。ユーザー入力が止まってから一定時間後に処理を実行し、不要なAPIコールや再レンダリングを防ぎます。検索入力、フォーム検証、自動保存など、頻繁に変更される値の処理に最適です。タイマーを使用して遅延を実装し、クリーンアップでメモリリークを防ぎます。パフォーマンス最適化の基本テクニックです。
import React, { useState, useEffect } from 'react';
{/* デバウンスカスタムフック */}
function useDebounce(value, delay) {
const [debouncedValue, setDebouncedValue] = useState(value);
useEffect(() => {
{/* タイマーを設定 */}
const timer = setTimeout(() => {
setDebouncedValue();
}, );
{/* タイマーをクリア */}
return () => clearTimeout();
}, [value, delay]);
return debouncedValue;
}
function App() {
const [search, setSearch] = useState("");
{/* デバウンスされた値 */}
const debouncedSearch = (search, 500);
return (
<div>
<input value={search} onChange={(e) => setSearch(e.target.value)} />
<p>検索: {debouncedSearch}</p>
</div>
);
}
export default App;