收藏
回答

page.setData 遇到的问题(bug?)

问题模块 框架类型 问题类型 终端类型 微信版本 基础库版本
框架 小程序 Bug 工具 7.0.4 2.7.5

- 当前 Bug 的表现(可附上截图)


数组 arr,在使用 arr.splice(i, 1)  删除 arr 中的元素(使用了自定义组件)后,再使用 this.setData({ arr }),则位于 i (删除之前是 i + 1)的元素,数据有误


- 预期表现


如下图所示,理论上,删除一个元素后,不应该改变后一个元素的值,但实际上却改变了



- 复现路径


- 提供一个最简复现 Demo


demo 链接:

链接:https://pan.baidu.com/s/1sCjJqr-kWrMaUbJ3W5UdAA 

提取码:sn2h


最后一次编辑于  07-15  (未经腾讯允许,不得转载)
回答关注问题邀请回答
收藏

4 个回答

  • 🍉
    🍉
    07-16

    直接上代码吧,楼主可以参考下

    Component({
      lifetimes: {
     
      },
      observers: {
        'text': function(text) {
          let t = text % 2 === 0 ? "偶数" : "奇数"
          this.setData({
            t
          })
        }
      },
      /**
       * 组件的属性列表
       */
      properties: {
        text:{
          type: Number,
          value: 0
        }
      },
      attached: function () {
        let t = this.properties.text % 2 === 0 ? "偶数" : "奇数"
        this.setData({
          t
        })
      },
      detached: function(e) {
        // 在组件实例被从页面节点树移除时执行
      },
      /**
       * 组件的初始数据
       */
      data: {
        t: "偶数"
      },
     
      /**
       * 组件的方法列表
       */
      
    })


    07-16
    赞同 1
    回复
  • "
    07-16

    看看这个 另一个page.setData的问题  https://developers.weixin.qq.com/community/develop/doc/000a48dcf70278f4bbd84bfcf5ac00

    07-16
    赞同
    回复
  • 就在那里
    就在那里
    07-15

    你是不是想问为什么删除12之后,13是偶数吗

    07-15
    赞同
    回复 2
    • 仙阁
      仙阁
      07-15
      是的
      07-15
      回复
    • 就在那里
      就在那里
      07-15回复仙阁
      在组件页加个数据监听试试:https://developers.weixin.qq.com/miniprogram/dev/framework/custom-component/observer.html
      07-15
      回复
  • July
    July
    07-15

    奇数偶数是根据index写的?

    07-15
    赞同
    回复 1
    • 仙阁
      仙阁
      07-15

      不是,是根据传进去的数,与 index 无关,事实上其它属性也会这样,代码如下


      --------------pages.index.wxml-------------

      <view class="container">

          <block wx:for="{{items}}" wx:key="index">

              <view class='row'>

                  <test text="{{item}}" />

                  <button style='margin-left: 40rpx' bindtap="bindtap" id="{{index}}">删除</button>

              </view>

          </block>

      </view>


      ---------------pages.index.js----------------

      const app = getApp()

      Page({

          data: {

              items: [11,12,13,14,15,16]

          },

          onLoad: function () {

          

          },

          bindtap(e){

              let items = this.data.items

              items.splice(e.currentTarget.id, 1)

              this.setData({

                  items

              })

          }

      })


      ---------------component.js----------------

      Component({


      lifetimes: {

          attached: function () {

              let t = this.properties.text % 2 === 0 ? "偶数" : "奇数"

              this.setData({

                  t

              })

          },

      },


      /**

        * 组件的属性列表

        */

      properties: {

          text:{

              type: Number,

              value: 0

          }

      },


      /**

        * 组件的初始数据

        */

      data: {

          t: "偶数"

      },


      /**

        * 组件的方法列表

        */

      methods: {


      }

      })


      ---------------component.wxml----------------

      <view>

          <text>{{ "当前:" + text + " 是 " + t}}</text>

      </view>



      07-15
      回复