小程序
小游戏
企业微信
微信支付
扫描小程序码分享
官方文档在不同地方提到过这二者,但没有说明关于二者有什么区别?
从纯数据字段上的介绍上说,纯数据字段感觉和非data 字段一样,但是官方有一句话,“能用非Data字段不用纯数据字段”,但没有说明理由。
这是很是迷惑。
6 个回答
加粗
标红
插入代码
插入链接
插入图片
上传视频
纯数据字段不在视图层上渲染,但能用于属性和数据监听器,让我们看看官方的示例:
// js Component({ options: { pureDataPattern: /^timestamp$/ // 将 timestamp 属性指定为纯数据字段 }, properties: { timestamp: Number, }, observers: { timestamp: function () { // timestamp 被设置时,将它展示为可读时间字符串 var timeString = new Date(this.data.timestamp).toLocaleString() this.setData({ timeString: timeString }) } } }) // wxml <view>{{timeString}}</view>
这里我们需要显示处理过的时间字符串,不需要渲染时间戳,所以把timestamp设置为纯数据字段来节省性能。
而非data字段不能用于属性和监听器,无法实现上述功能。
你好,麻烦通过点击下方“反馈信息”按钮,提供出现问题的。
本质上两种都指的是:不会显示在视图层上的数据,也就是不会参与页面/组件渲染(即使你通过setData改变值也不会应用到视图层),只是在逻辑层内改变和调用。
纯数据字段定义在data对象中,而非data字段你可以类似下面定义:
// ① Page({ pageData: { test: true // 获取this.pageData.test }, data: {} }) // ② let pageData = {} Page({ data: {}, func() { pageData.test = true console.log(pageData.test) } })
1.非data字段无法被observers侦听,observers只能侦听properties和data下的属性。
2.在Component自定义组件里也无法在一开始绑定到Component属性上,只能在attached里手动设置,像this.myCustomData = {a: 1},因为除了原生的属性,其他的会被忽略。
我理解 纯数据字段既能声明在data里,也能通过pureDataPattern把properties上的字段改成纯数据字段。如果官方有说“能用非Data字段不用纯数据字段”,可以这样理解,存数据字段建议用在properties字段上,其他情况用非Data字段
简单点:wxml用不到到的变量不要定义到 Page({data: {}})里边
不需要渲染到视图层的,使用非data字段即可;需要渲染到视图的数据放page.data中
关注后,可在微信内接收相应的重要提醒。
请使用微信扫描二维码关注 “微信开放社区” 公众号
纯数据字段不在视图层上渲染,但能用于属性和数据监听器,让我们看看官方的示例:
// js Component({ options: { pureDataPattern: /^timestamp$/ // 将 timestamp 属性指定为纯数据字段 }, properties: { timestamp: Number, }, observers: { timestamp: function () { // timestamp 被设置时,将它展示为可读时间字符串 var timeString = new Date(this.data.timestamp).toLocaleString() this.setData({ timeString: timeString }) } } }) // wxml <view>{{timeString}}</view>
这里我们需要显示处理过的时间字符串,不需要渲染时间戳,所以把timestamp设置为纯数据字段来节省性能。
而非data字段不能用于属性和监听器,无法实现上述功能。
本质上两种都指的是:不会显示在视图层上的数据,也就是不会参与页面/组件渲染(即使你通过setData改变值也不会应用到视图层),只是在逻辑层内改变和调用。
纯数据字段定义在data对象中,而非data字段你可以类似下面定义:
// ① Page({ pageData: { test: true // 获取this.pageData.test }, data: {} }) // ② let pageData = {} Page({ data: {}, func() { pageData.test = true console.log(pageData.test) } })
1.非data字段无法被observers侦听,observers只能侦听properties和data下的属性。
2.在Component自定义组件里也无法在一开始绑定到Component属性上,只能在attached里手动设置,像this.myCustomData = {a: 1},因为除了原生的属性,其他的会被忽略。
我理解 纯数据字段既能声明在data里,也能通过pureDataPattern把properties上的字段改成纯数据字段。如果官方有说“能用非Data字段不用纯数据字段”,可以这样理解,存数据字段建议用在properties字段上,其他情况用非Data字段
简单点:wxml用不到到的变量不要定义到 Page({data: {}})里边
不需要渲染到视图层的,使用非data字段即可;需要渲染到视图的数据放page.data中