🚀 新規事業
form-draft-autosave
最終更新 2026年05月08日 / 40_新規事業/SCALE_Build/カタログ/基本装備集/form-draft-autosave.md
入力中のフォームが消えない
何のために?
入力途中で閉じた・リロードした → 全部消えた → 二度と書きたくない、を防ぐ。
どう実装する?
localStorage に1秒debounceで自動保存。フォーム送信時に削除。
コード例
function useDraft<T>(key: string, initial: T) {
const [val, setVal] = useState<T>(() => {
try { return JSON.parse(localStorage.getItem('draft:' + key) ?? '') ?? initial; }
catch { return initial; }
});
useEffect(() => {
const t = setTimeout(() => localStorage.setItem('draft:' + key, JSON.stringify(val)), 1000);
return () => clearTimeout(t);
}, [val, key]);
const clear = () => localStorage.removeItem('draft:' + key);
return [val, setVal, clear] as const;
}