解决分析bug能力提高篇之(小程序setData方法修改复杂结构数据 三)

411 阅读2分钟

一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第7天,点击查看活动详情

Hai,Liiy!

【我写的文章都是在工作中遇到的一些问题的重现,每一个字都是手打的。希望大家多多 评论 点赞 收藏】 🙏🙏🙏 同为程序猿,我想要手环

课程背景

  • 程序员嘛,最开心的就是每天复制粘贴cv cv cv cv的,轻车熟路的整点业务。
  • 但是当偶尔遇到一些bug,那可就让人挠头了。
  • 最近是忙的焦头烂额的,一点时间都没有。但是掘金粑粑给个挂件
  • 所以就补齐第一关的文章

正文开始

上一章节中我们进行了问题分析,这里继续

问题分析

4 当我们再次回到列表页的时候,就需要在onShow的生命周期函数中,对相应的数据进行操作了。

  onShow: function () {
    /**
     * 业务逻辑进行调整
     * 在详情页进行一些操作
     * 返回列表要求还是停止当前位置
     */
    let changed_data =   wx.getStorageSync('wx_has_changed_id')
    if (changed_data) {
	  this.selectComponent("#gofor").updateStateById(changed_data);
    }
}

这里我们取出缓存中需要更新的数据。因为每一条数据是一个组件,所以调用了小程序组件,并传递我们之前储存下来的数据。

5 组件中,我们尝试着对已有数据进行部分更新的操作。 这里遇到一个问题是,之前使用的是js的find方法,找到了需要更新的条目数据。

		let cur_item =  this.data.lists.find(x=>x.id == param.id)
		if(cur_item && cur_item.state != param.state){
			this.setData({
				item.state:param.state
			})
		}

但是小程序中数据是 lists 好像无法用 setData这种方式修改单独的值。所以这种方式尝试好久都没有成功。

无奈只能用for循环的方式,直接对lists中的数据进行修改。

	  /**不刷新列表的前提下,更新部分字段*/
	  updateStateById(param){
		  for(let i=0; i < this.data.lists.length; i++){
			  if(this.data.lists[i].id == param.id){
				  console.log('找到item',this.data.lists[i])
				  this.setData({
				        ['lists['+i+'].state']: param.state
				  })
			  }
		  }
	  }

修改的方式是参考了微信社区的这篇文章 developers.weixin.qq.com/community/d…

总结

这样就完成了文章开头中需要实现的客户要求了。