微信小程序----修改data中的数据,页面数据不改变

本文深入解析了微信小程序中setData函数的作用及其使用方法。通过对比常规赋值方式与setData的不同,阐述了setData如何确保数据同步更新至视图层,避免data与视图层数据表现不一致的问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

WXRUI体验二维码

WXRUI体验码

如果文章对你有帮助的话,请打开微信扫一下二维码,点击一下广告,支持一下作者!谢谢!

错误原因

由于VUE等框架,我们在逻辑层修改data中的数据后,视图层(页面渲染)会跟着发生变化。当然微信小程序也是实现了相同的功能,那么出现错误的原因是什么?答案:微信小程序的setData()方法。

常见赋值方式(习惯)导致的错误

Page({
  data: {
    isShow: false
  },
  changeStatus(){
    console.log(this.data.isShow);
    this.data.isShow = true;
    console.log(this.data.isShow);
  }
})
效果图

这里写图片描述

从上边代码和效果图我们可以看出:1、习惯的赋值方式“=”在逻辑层是起到了作用改变了isShow;2、视图层的并没有发生变化。
结论就是常规的“=”赋值方式,在微信小程序中只能改变data中的数据,而不能改变视图层的数据,那么微信小程序怎么解决这个问题的,setData()方法。

Page.prototype.setData()

setData 函数用于将数据从逻辑层发送到视图层(异步),同时改变对应的 this.data 的值(同步)。

setData函数做了哪些事情?
  1. 将数据从逻辑层发送到视图层----这个刚好解决我们这里出现的错误,视图层数据的改变
  2. 改变对应的 this.data 的值----同时在逻辑层将data中的值改变
Page({
  data: {
    isShow: false,
    isShow1: false
  },
  changeStatus(){
    console.log(this.data.isShow);
    this.data.isShow = true;
    console.log(this.data.isShow);
  },
  changeStatus1() {
    console.log(this.data.isShow);
    this.setData({ isShow:true});
    console.log(this.data.isShow);
  }
})
效果图

这里写图片描述

总结:

  1. 在开发程序的时候,我们要遵循别人的规则来开发,不要被习惯所左右;
  2. 熟悉开发文档,减少这种习惯错误(不易被发现);
  3. 微信小程序开发中,为了减少data和视图层数据表现不一致,全部采用setData方法修改值。

setData函数注意事项

  1. 直接修改 this.data 而不调用 this.setData 是无法改变页面的状态的,还会造成数据不一致。
  2. 单次设置的数据不能超过1024kB,请尽量避免一次设置过多的数据。
  3. 请不要把 data 中任何一项的 value 设为 undefined ,否则这一项将不被设置并可能遗留一些潜在问题。

WXRUI体验二维码

WXRUI体验码

如果文章对你有帮助的话,请打开微信扫一下二维码,点击一下广告,支持一下作者!谢谢!

其他

我的博客,欢迎交流!

我的CSDN博客,欢迎交流!

微信小程序专栏

前端笔记专栏

微信小程序实现部分高德地图功能的DEMO下载

微信小程序实现MUI的部分效果的DEMO下载

微信小程序实现MUI的GIT项目地址

微信小程序实例列表

前端笔记列表

游戏列表

### 解决微信小程序中 `qiun-data-charts` 图表显示错乱的方法 在处理微信小程序中的 `qiun-data-charts` 图表显示错乱问题时,可以采取多种策略来确保图表能够正确呈现并响应用户的交互操作。 #### 1. 确认 Canvas 渲染模式设置正确 如果开启了 canvas2d 模式,则可能会遇到渲染位置错误的问题。建议尝试关闭此选项或将渲染方式更改为默认的 WebGL 或其他支持更好的模式[^2]。 ```javascript // 配置项示例 const config = { type: 'column', // 图表类型 canvasId: 'mychart', categories: ['Mon', 'Tue'], series: [{ name: "Sales", data: [35, 87] }], animation: true, enableScroll: false, // 关闭必要的特性以减少冲突可能性 }; ``` #### 2. 初始化前清除旧实例 当页面重新加载或切换标签页时,应先销毁之前的 chart 实例再创建新的实例,防止残留对象影响布局计算[^3]. ```javascript if (this.chart) this.chart.destroy(); this.chart = new uCharts(config); ``` #### 3. 动态调整容器尺寸适应内容变化 对于因屏幕旋转或其他原因引起的视口大小改变情况,在事件触发后及时更新图表所在 DOM 元素的高度宽度属性,并调用相应方法刷新绘图区域[^1]. ```css /* CSS */ .page-container { position: relative; } .canvas-box { width: 100%; height: auto; /* 根据实际需要设定高度 */ } /* JavaScript */ Page({ onReady() { const query = wx.createSelectorQuery().in(this); query.select('.canvas-box').boundingClientRect((rect) => { if (!rect) return; Object.assign(rect, { top: rect.top }); this.setData({ boxRect: rect }); setTimeout(() => { this.initChart(); // 延迟初始化以便获取到最新的DOM信息 }, 100); // 设置适当延时时间 }).exec(); }, }); ``` #### 4. 数据量过大时启用懒加载机制 针对大数据集场景下可能出现性能瓶颈的情况,可以通过分批加载数据点或者采用虚拟列表技术优化展示效率,从而避免一次性绘制过多图形元素造成界面卡顿甚至崩溃现象发生. ```javascript config.dataHandler = function(data){ var newData = []; for(var i=0;i<data.length && i<100;++i){ // 控制每次最多只取100条记录 newData.push(data[i]); } return newData; }; ``` 通过上述措施的应用,应该能够在很大程度上改善 `qiun-data-charts` 在同设备上的兼容性和稳定性表现,有效解决图表显示错位等问题。
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Rattenking

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值