form-create icon indicating copy to clipboard operation
form-create copied to clipboard

`effect`的生命周期`watch`,不会被触发,在规则初始化时,如果自定义属性未设定默认值的情况下

Open anywo opened this issue 3 years ago • 1 comments

@form-create/ant-design-vue@^2.5.21

UI 框架的版本

1.7.8

问题描述

effect的生命周期watch,规则初始化时,如果自定义属性未设定默认值, 使用setEffect进行更新,不会被触发。

复现步骤/生成规则 (Duplicate steps/generate rules)

/** 以下时自定义属性 **/
// 监听表单值的watch
formCreate.register({
  name: "watch",
  //属性值发生变化
  watch({ value }, rule, fapi) {
    !rule.$watches && (rule.$watches = new Set());
    typeof value === "function" && rule.$watches.add(value);
  },
});
formCreate.register({
  name: "watches",
  //组件的值发生变化
  value({ value }, rule, fapi) {
    value && [...value].forEach((x) => x(rule, fapi));
  },
});

/** 初始化时使用的规则 **/
const rules = [{
    type:"input",
    title:"商品名称",
    field:"goods_name",
    value:"iphone 7",
    props: {
        type: "text",
    },
    validate:[
        { required: true, message: '请输入goods_name', trigger: 'blur' },
    ],
    // $watch: undefined,
}];

/** 过程中修改属性值使用 **/
fApi.setEffect("goods_name", "watch", ()=> console.log(123456));

期望的结果 (Desired outcome)

在初始化时,未设定自定义初始化值的情况下,使用setEffect方法可以触发watch生命周期,并在之后的操作中也可以触发。

建议 (Advice)

建议参考Vue中的$set机制。

anywo avatar Jul 01 '22 09:07 anywo

没有预定义的自定义属性不是触发相关事件, 这个设计就是如此

xaboy avatar Jul 02 '22 01:07 xaboy