Browse Source

feat: 使用useForm时调用setFieldsValue后,组件的onChange未主动触发 (#2142) (#2503)

Co-authored-by: maxiaojing <maxiaojing@hashdata.cn>
vivianma83 2 years ago
parent
commit
4c67d8c388
2 changed files with 17 additions and 10 deletions
  1. 13 10
      src/components/Form/src/hooks/useFormEvents.ts
  2. 4 0
      src/views/demo/form/RuleForm.vue

+ 13 - 10
src/components/Form/src/hooks/useFormEvents.ts

@@ -76,6 +76,11 @@ export function useFormEvents({
       const hasKey = Reflect.has(values, key);
 
       value = handleInputNumberValue(schema?.component, value);
+      const { componentProps } = schema || {};
+      let _props = componentProps as any;
+      if (typeof componentProps === 'function') {
+        _props = _props({ formModel: unref(formModel) });
+      }
       // 0| '' is allow
       if (hasKey && fields.includes(key)) {
         // time type
@@ -85,17 +90,15 @@ export function useFormEvents({
             for (const ele of value) {
               arr.push(ele ? dateUtil(ele) : null);
             }
-            formModel[key] = arr;
+            unref(formModel)[key] = arr;
           } else {
-            const { componentProps } = schema || {};
-            let _props = componentProps as any;
-            if (typeof componentProps === 'function') {
-              _props = _props({ formModel });
-            }
-            formModel[key] = value ? (_props?.valueFormat ? value : dateUtil(value)) : null;
+            unref(formModel)[key] = value ? (_props?.valueFormat ? value : dateUtil(value)) : null;
           }
         } else {
-          formModel[key] = value;
+          unref(formModel)[key] = value;
+        }
+        if (_props?.onChange) {
+          _props?.onChange(value);
         }
         validKeys.push(key);
       } else {
@@ -103,13 +106,13 @@ export function useFormEvents({
           try {
             const value = nestKey.split('.').reduce((out, item) => out[item], values);
             if (isDef(value)) {
-              formModel[nestKey] = value;
+              unref(formModel)[nestKey] = unref(value);
               validKeys.push(nestKey);
             }
           } catch (e) {
             // key not exist
             if (isDef(defaultValueRef.value[nestKey])) {
-              formModel[nestKey] = cloneDeep(defaultValueRef.value[nestKey]);
+              unref(formModel)[nestKey] = cloneDeep(unref(defaultValueRef.value[nestKey]));
             }
           }
         });

+ 4 - 0
src/views/demo/form/RuleForm.vue

@@ -98,6 +98,9 @@
             key: '2',
           },
         ],
+        onChange: (value) => {
+          console.log(value, '123');
+        },
       },
       rules: [
         {
@@ -235,6 +238,7 @@
       function setFormValues() {
         setFieldsValue({
           field1: 1111,
+          field4: ['1'],
           field5: ['1'],
           field7: '1',
           field33: '2020-12-12',