收藏
回答

纯数据字段与非 data 字段有什么区别?

官方文档在不同地方提到过这二者,但没有说明关于二者有什么区别?

从纯数据字段上的介绍上说,纯数据字段感觉和非data 字段一样,但是官方有一句话,“能用非Data字段不用纯数据字段”,但没有说明理由。


这是很是迷惑。

回答关注问题邀请回答
收藏

6 个回答

  • 晨光
    晨光
    2022-06-13

    纯数据字段不在视图层上渲染,但能用于属性和数据监听器,让我们看看官方的示例:

    // 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字段不能用于属性和监听器,无法实现上述功能。

    2022-06-13
    有用 2
    回复 1
    • 三毛
      三毛
      2022-06-13
      这个是正解
      2022-06-13
      回复
  • brave
    brave
    2022-06-11

    本质上两种都指的是:不会显示在视图层上的数据,也就是不会参与页面/组件渲染(即使你通过setData改变值也不会应用到视图层),只是在逻辑层内改变和调用。

    纯数据字段定义在data对象中,而非data字段你可以类似下面定义:

    // ①
    Page({
      pageData: {
        test: true // 获取this.pageData.test
      },
      data: {}
    })
    // ②
    let pageData = {}
    Page({
      data: {},
      func() {
        pageData.test = true
        console.log(pageData.test)
      }
    })
    
    2022-06-11
    有用 3
    回复 1
    • 三毛
      三毛
      2022-06-11
      这么说,只是定义的地方不一样,应用上没有什么区别了?
      2022-06-11
      1
      回复
  • 胜利之日
    胜利之日
    2023-12-07

    1.非data字段无法被observers侦听,observers只能侦听properties和data下的属性。

    2.在Component自定义组件里也无法在一开始绑定到Component属性上,只能在attached里手动设置,像this.myCustomData = {a: 1},因为除了原生的属性,其他的会被忽略。

    2023-12-07
    有用
    回复
  • 平安喜乐
    平安喜乐
    2023-06-14

    我理解 纯数据字段既能声明在data里,也能通过pureDataPattern把properties上的字段改成纯数据字段。如果官方有说“能用非Data字段不用纯数据字段”,可以这样理解,存数据字段建议用在properties字段上,其他情况用非Data字段

    2023-06-14
    有用
    回复
  • Listen
    Listen
    2022-06-11

    简单点:wxml用不到到的变量不要定义到 Page({data: {}})里边



    2022-06-11
    有用
    回复 1
    • 三毛
      三毛
      2022-06-11
      没认真看题 :)
      2022-06-11
      1
      回复
  • Frank
    Frank
    2022-06-11

    不需要渲染到视图层的,使用非data字段即可;需要渲染到视图的数据放page.data中

    2022-06-11
    有用
    回复 1
    • 三毛
      三毛
      2022-06-11
      纯数据字段呢?
      2022-06-11
      回复
登录 后发表内容