微信小程序: 纯数据字段以及数据监听

318 阅读2分钟

TS定义组件,想使用自定义属性怎么办?

想在组件中使用自定义属性(且该属性与视图显示无关),使用TS方式定义就会像下面的例子(job就是期望的自定义属性)。可能会增加很多工作量,组件中定义的所有字段,方法都需要增加类型说明。这不是我期望的。因此找到了纯数据字段

{
  type IData = {
    name: string,
  }
  type IProperty = {
    id: typeof Number,
  }
  type IMethod = {
    setJob(job: string): void,
  }
  type ICustomInstanceProperty = {
    job: string,
  }
  Component<IData, IProperty, IMethod, ICustomInstanceProperty>({
    properties: {
      id: Number,
    },

    data: {
      name: '',
    },

    methods: {
      setJob(job) {
        this.job = job
        expectType<string>(this.job)
      },
    },
  })
}

纯数据字段

2.8.2开始支持,纯数据字段同样也是声明在data中,但需要增加一个option配置,告知编辑器,如何识别纯数据字段

自定义组件 / 纯数据字段 (qq.com)

import WxValidate from "@/utils/WxValidate";

import type {
  WxValidateInstance,
  WxValidateMessagesInfo,
  WxValidateRulesInfo,
} from "@/utils/WxValidate.type";

Component({
  options: {
    /**
     * 指定所有 _ 开头的数据字段为纯数据字段
     */
    pureDataPattern: /^_/,
  },
  data: {
    formData: {
      switchChecked: false,
      radio: "1",
      checkbox: ["b"],
      inputValue: "",
    },
    /**
     * key为字段名
     * value为错误提示信息
     */
    fieldsError: {},
  },
  lifetimes: {
    ready() {
      const rulesInfo: WxValidateRulesInfo = {
        checkbox: { required: true },
        inputValue: { required: true },
      };
      const messagesInfo: WxValidateMessagesInfo = {
        checkbox: {
          required: "复选组件必填",
        },
        inputValue: { required: "文本输入组件必填" },
      };
      const wxValidate = new WxValidate(
        rulesInfo,
        messagesInfo
      ) as unknown as WxValidateInstance;
      this.setData({
        formData: {
          switchChecked: false,
          radio: "1",
          checkbox: ["b"],
          inputValue: "",
        },
        // 设置纯数据字段
        _wxValidate: wxValidate,
      });
    },
  },
  methods: {
    formSubmit(e: WechatMiniprogram.CustomEvent) {
      console.log("form发生了submit事件,携带数据为:", this.data.formData);
      // 获取纯数据字段
      const _wxValidate = this.data._wxValidate as WxValidateInstance;
    },
});

数据监听

data 数据监听(2.6.1开始支持)

自定义组件 / 数据监听器 (qq.com)

properties 数据监听

  1. 同样可以通过 自定义组件 / 数据监听器 (qq.com) 方式监听
  2. 也可以使用 小程序properties属性中的observer的使用 方式监听

自定义组件中 properties 的observer | 微信开放社区 (qq.com)

如何监听properties里面的数据变化? | 微信开放社区 (qq.com)

参考资料

Component 不能往 this 上加自定义属性 · Issue #133 · wechat-miniprogram/api-typings · GitHub

自定义组件 / 纯数据字段 (qq.com)

api-typings/test/issue.test.ts at 1ae404cfd34885cf57e0988e815d91d82e4b19a0 · wechat-miniprogram/api-typings · GitHub

自定义组件 / 数据监听器 (qq.com)

自定义组件中 properties 的observer | 微信开放社区 (qq.com)