@@ -61,6 +61,8 @@ const useForm: UseForm = <T>(intial: Partial<T>) => {
61
61
62
62
const fieldOptions = { }
63
63
64
+ const fields = { }
65
+
64
66
const [ hooksState , setState ] = useState ( {
65
67
fields : Object . keys ( initialData ) . reduce ( ( prev , key ) => {
66
68
return {
@@ -72,8 +74,6 @@ const useForm: UseForm = <T>(intial: Partial<T>) => {
72
74
options : { } ,
73
75
} )
74
76
75
- // const fieldOptions = fieldOptionsRef.current
76
-
77
77
let state = hooksState
78
78
79
79
const dispatch = function ( type , payload ) {
@@ -161,29 +161,32 @@ const useForm: UseForm = <T>(intial: Partial<T>) => {
161
161
162
162
const field = < K extends keyof T > ( name : K , option ?: FieldOption ) => {
163
163
setOption ( name , option )
164
- return {
165
- get value ( ) {
166
- const value = get ( state , `fields.${ name } .value` )
167
- return value === undefined ? getResetValue ( option && option . type ) : value
168
- } ,
169
- set value ( value ) {
170
- this . onChange ( value )
171
- } ,
172
- onChange ( event : Event | any ) {
173
- const value = event . target ? event . target . value : event
174
- const newState = updateField ( name , {
175
- value,
176
- touched : true
177
- } )
178
- innerValidate ( noop , [ name ] , 'change' , newState )
179
- } ,
180
- onBlur ( ) {
181
- const newState = updateField ( name , {
182
- touched : true
183
- } )
184
- innerValidate ( noop , [ name ] , 'blur' , newState )
185
- } ,
164
+ if ( ! fields [ name as string ] ) {
165
+ fields [ name as string ] = {
166
+ get value ( ) {
167
+ const value = get ( state , `fields.${ name } .value` )
168
+ return value === undefined ? getResetValue ( option && option . type ) : value
169
+ } ,
170
+ set value ( value ) {
171
+ this . onChange ( value )
172
+ } ,
173
+ onChange ( event : Event | any ) {
174
+ const value = event . target ? event . target . value : event
175
+ const newState = updateField ( name , {
176
+ value,
177
+ touched : true
178
+ } )
179
+ innerValidate ( noop , [ name ] , 'change' , newState )
180
+ } ,
181
+ onBlur ( ) {
182
+ const newState = updateField ( name , {
183
+ touched : true
184
+ } )
185
+ innerValidate ( noop , [ name ] , 'blur' , newState )
186
+ } ,
187
+ }
186
188
}
189
+ return fields [ name as string ]
187
190
}
188
191
189
192
return [
0 commit comments