@@ -8,6 +8,7 @@ import type { IEventCallback, IForm } from "../logic/createForm";
8
8
import { IDefaultProp , ISchemaFieldCore } from "../types" ;
9
9
import { FormContext } from "../contexts/FormContext" ;
10
10
import useSubscribeAndCompare from "./useSubscribeAndCompare" ;
11
+ import generateId from "../utils/generateId" ;
11
12
12
13
// eslint-disable-next-line no-use-before-define
13
14
export const useFieldForm = < TSchema extends ISchemaFieldCore > ( props : {
@@ -20,6 +21,8 @@ export const useFieldForm = <TSchema extends ISchemaFieldCore>(props: {
20
21
const { form = formContext , schema } = props as { form : IForm < TSchema > , schema : TSchema } ;
21
22
const _ref = useRef < any > ( ) ;
22
23
24
+ const identity = schema . config ?. name || schema . key || generateId ( ) ;
25
+
23
26
useSubscribeAndCompare ( {
24
27
form,
25
28
getState ( ) {
@@ -29,12 +32,12 @@ export const useFieldForm = <TSchema extends ISchemaFieldCore>(props: {
29
32
} ) ;
30
33
31
34
useEffect ( ( ) => {
32
- form . fieldRef [ schema . config . name ] = _ref ;
35
+ form . fieldRef [ identity ] = _ref ;
33
36
return ( ) => {
34
- delete form . fieldRef [ schema . config . name ] ;
35
- form . unregisterEvent ( "submit" , schema . config . name ) ;
37
+ delete form . fieldRef [ identity ] ;
38
+ form . unregisterEvent ( "submit" , identity ) ;
36
39
} ;
37
- } , [ schema . config . name ] ) ;
40
+ } , [ identity ] ) ;
38
41
39
42
return {
40
43
state : form . getSchemaFieldState < TSchema [ "initialValue" ] , TSchema [ "propStateType" ] & IDefaultProp > ( schema as any ) ,
@@ -45,20 +48,20 @@ export const useFieldForm = <TSchema extends ISchemaFieldCore>(props: {
45
48
onChange : useCallback (
46
49
( arg : any ) => {
47
50
if ( typeof arg === "function" ) {
48
- form . setValue ( schema . config . name , arg ( form . state . values ) ) ;
51
+ form . setValue ( identity , arg ( form . state . values ) ) ;
49
52
} else {
50
- form . setValue ( schema . config . name , arg ) ;
53
+ form . setValue ( identity , arg ) ;
51
54
}
52
55
} ,
53
- [ schema . config . name , form ] ,
56
+ [ identity , form ] ,
54
57
) ,
55
58
registerSubmit : useCallback (
56
- ( callback : IEventCallback ) => form . registerEvent ( "submit" , schema . config . name as string , callback ) ,
57
- [ schema . config . name , form ] ,
59
+ ( callback : IEventCallback ) => form . registerEvent ( "submit" , identity as string , callback ) ,
60
+ [ identity , form ] ,
58
61
) ,
59
62
onBlur : useCallback (
60
- ( ) => form . updateTouch ( schema . config . name ) ,
61
- [ schema . config . name , form ] ,
63
+ ( ) => form . updateTouch ( identity ) ,
64
+ [ identity , form ] ,
62
65
) ,
63
66
} ;
64
67
} ;
0 commit comments