- 当前 Bug 的表现(可附上截图)
数组 arr,在使用 arr.splice(i, 1) 删除 arr 中的元素(使用了自定义组件)后,再使用 this.setData({ arr }),则位于 i (删除之前是 i + 1)的元素,数据有误
- 预期表现
如下图所示,理论上,删除一个元素后,不应该改变后一个元素的值,但实际上却改变了
- 复现路径
- 提供一个最简复现 Demo
demo 链接:
链接:https://pan.baidu.com/s/1sCjJqr-kWrMaUbJ3W5UdAA
提取码:sn2h
直接上代码吧,楼主可以参考下
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:
"偶数"
},
/**
* 组件的方法列表
*/
})
看看这个 另一个page.setData的问题 https://developers.weixin.qq.com/community/develop/doc/000a48dcf70278f4bbd84bfcf5ac00
你是不是想问为什么删除12之后,13是偶数吗
奇数偶数是根据index写的?
不是,是根据传进去的数,与 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>