1- import { useEffect } from 'react' ;
1+ import { useEffect , useState } from 'react' ;
22import type { UseFormReturn } from 'react-hook-form' ;
3+ import { useEffectOnce } from 'react-use' ;
34
45// フォームの情報をlocalStorageに保存して永続化する
56export const useFormPersistence = < T > (
@@ -13,17 +14,26 @@ export const useFormPersistence = <T>(
1314 formState : { isDirty } ,
1415 } = methods ;
1516 const formData = watch ( ) ;
17+ const [ isDefault , setIsDefault ] = useState ( true ) ;
1618
1719 useEffect ( ( ) => {
18- const defaultValues = JSON . parse ( localStorage . getItem ( name ) ) ;
19- if ( ! isDirty ) {
20- setCallback ( defaultValues ) ;
20+ try {
21+ const defaultValues = JSON . parse ( localStorage . getItem ( name ) ) ;
22+ if ( ! isDirty && isDefault ) {
23+ setCallback ( defaultValues ) ;
24+ // console.log('get', { name, defaultValues });
25+ setIsDefault ( false ) ;
26+ }
27+ } catch ( e ) {
28+ console . error ( e ) ;
2129 }
22- } , [ isDirty ] ) ;
30+ } , [ isDirty , isDefault ] ) ;
2331
2432 useEffect ( ( ) => {
25- if ( isDirty ) {
33+ // console.log('set1', { name, isDirty, isDefault, formData });
34+ if ( isDirty || ( ! isDirty && ! isDefault ) ) {
2635 localStorage . setItem ( name , JSON . stringify ( formData ) ) ;
36+ // console.log('set2', { name, isDirty, isDefault, formData });
2737 }
28- } , [ formData , isDirty ] ) ;
38+ } , [ formData , isDirty , isDefault ] ) ;
2939} ;
0 commit comments