小程序 setData 动态 key 的写法

article/2025/8/27 2:52:52

setData 是小程序开发中使用最频繁的接口,也是最容易引发性能问题的接口。

本篇文章主要说一说 setData 的正确使用 和 动态 key 的使用。

目录

Page.prototype.setData(Object data, Function callback)

#1 什么时候应该使用 setData 函数?

#2 常用的 setData 函数使用方法

(1)修改数组的指定项值

(2)修改对象的指定属性值

(3)callback 函数的使用

#3 动态 key 的写法


Page.prototype.setData(Object data, Function callback)

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

setData 函数参数说明:

字段类型必填描述
dataObject这次要改变的数据
callbackFunctionsetData引起的界面更新渲染完毕后的回调函数

#1 什么时候应该使用 setData 函数?

  1. 有需要更新视图时才使用。若无需修改视图,可直接写 this.data.xxx='xx';

#2 常用的 setData 函数使用方法

先上一段默认的数据

Page({data: {basic:{name:'helang',email:'helang.love@qq.com',age:24},hobby: ['爬山', '游泳', '阅读'],job:'web前端工程师'},onLoad: function () {}
})

(1)修改数组的指定项值

/*方法一:先修改数组,后更新视图ps:如果数组中有大量值修改时推荐使用该方法
*/
this.data.hobby[0]="写代码";
this.setData({"hobby": this.data.hobby
});/*方法二:指定数组项更新ps:如果只有某一项发生改变时推荐使用该方法
*/
this.setData({"hobby[0]":'写代码'
});

(2)修改对象的指定属性值

/*方法一:先修改对象的值,后更新视图ps:如果对象中有大量值修改时推荐使用该方法
*/
this.data.basic.email="1846492969@qq.com";
this.setData({"basic":this.data.basic
})/*方法二:指定数组项更新ps:如果只有某一项发生改变时推荐使用该方法
*/
this.setData({"basic.email": "1846492969@qq.com"
})

(3)callback 函数的使用

/*常规写法
*/
this.setData({"job": "web前端"
})
console.log(this.data.job);/* 使用 callback 函数写法。如果有需要在更新视图之后运行的代码,推荐使用该方法。功能表现上与 上述 写法一致。
*/
this.setData({"job": "web前端"
},()=>{console.log(this.data.job);
})

#3 动态 key 的写法

有些时候,使用动态 key 的要求可能是因为后端,也有可能是为使代码美观。

小编在遇到该需求时,写下了如下代码:

let key ="basic.name";
this.setData({key: "河浪"
})

结果悲剧了,没能成功的更新视图上的 {{basic.name}} 值,结果是在 this.data 属性中 新增加了一个 key:"河浪" 的值。

NO NO NO,这不是我想要的。但当时也没多想,通过一个个写 key 的方式完成了功能需求。

正确的写法应该是这样的!

let key ="basic.name";
this.setData({[key]: "河浪"
})

那么,现在用 动态 key 的方式来一波实际点的骚操作吧。

let { keys,values} = {keys:["basic.name", "hobby[1]", "job"],values:["河浪", "写代码", "web前端"]
};
keys.forEach((item,index)=>{  this.setData({[item]: values[index]})
});

当然,上面的代码只是为了演示动态 key 的使用,如果知道要修改那些 key 的情况下,推荐使用在 setData 函数中传入多个 key。

在文章的结尾附上与本篇文章有关的官方文档地址:

  • setData 函数详解(在文档的末尾处)。[传送门]
  • 小程序优化建议。[传送门]

作者:黄河爱浪 QQ:1846492969,邮箱:helang.love@qq.com

公众号:web-7258,本文原创,著作权归作者所有,转载请注明原链接及出处。

更多精彩文章,请扫下方二维码关注我的公众号


http://chatgpt.dhexx.cn/article/4vkSMdBn.shtml

相关文章

小程序setData函数小探究

官方文档可以知道 setData函数改变Page的data是同步的,会异步通知视图层data的改变,视图层收到通知后进行渲染。即官方文档里生命周期的Send Data箭头 callback分析 先上代码: Page({data: {theData: 1},onLoad: function(options) {conso…

微信小程序中this.setData is not a function报错问题

微信小程序中this.setData is not a function报错问题 新手在编写小程序时经常会遇到的一种错误。 新手在编写小程序时经常会遇到的一种错误。 在小程序中,通常我们用setData修改数据,用于函数时不会报错。 eg. setData function(e){this.setData({mob…

小程序中this.setData的使用和注意事项

前言:微信小程序中经常需要用到this.setData({})把变量值渲染到视图层,那到底什么是this.setData,如何使用?需要注意哪些?作为一个初学者,分享一点我的经验,希望大家批评指正。 介绍&#xff1a…

微信小程序setData()方法的使用

官方解释: setData 函数用于将数据从逻辑层发送到视图层(异步),同时改变对应的 this.data 的值(同步)。 自己通俗的理解就是给数据复制用的, 结合一个demo说下setdata的使用 不如点击确定按钮把当前的值显示的布局中…

android setdata方法,Android intent.setData方法

1 从文本框中获取内容 EditText mobileText (EditText)findViewById(R.id.mobile); String mobile mobileText.getText().toString(); 2 打电话的权限 在功能清单中加入代码 编写代码实现Button的点击相应 Intent intent new Intent(); intent.setAction("android.inte…

微信小程序中 setData 详解

虽互不曾谋面,但希望能和您成为笔尖下的朋友 以读书,技术,生活为主,偶尔撒点鸡汤 不作,不敷衍,意在真诚吐露,用心分享 点击左上方,可关注本刊 标星公众号(ID:itclanCoder) 如果不知道如何操作 点击这里,标星不迷路 ━━━━━━ ━━━━━━…

微信小程序————setData()方法的使用和注意事项

微信小程序setData()使用: ##Page.prototype.setData(Object data, Function callback) setData 函数用于将数据从逻辑层发送到视图层(异步),同时改变对应的 this.data 的值(同步)。 参数说明: …

微信小程序setData注意事项,使用方法

1..微信小程序开发中,为了减少data和视图层数据表现不一致,全部采用setData方法修改值。 setData函数注意事项 1..直接修改 this.data 而不调用 this.setData 是无法改变页面的状态的,还会造成数据不一致。 2..单次设罟的数据不能超过1024kB&…

layui自定义table中的templet

1.效果图如下 2.后端返回数据如下 3.实现代码如下 {field: "triggerPara",title: "触发参数",templet: function (d) {let text"" , type;for(let i 0 ; i < d.triggerPara.length ; i ){if(d.triggerPara[i].type 0){type 门禁}else i…

layui table 更新行触发templet重新渲染

更新方法 obj.update({// 这里的字段必须要在 table.render.cols.filed 有定义&#xff0c;否则无法触发表格渲染// key 决定是否重新渲染某一列&#xff0c;value 由 templet 里的语句进行逻辑处理canView: !data.canView }); , {field: canView, title: 操作, toolbar: #te…

layui2.4.5版本解决table使用templet导出数据问题

在使用 table 自带的导出功能时对使用了templet的数据导出为空 使用较高的版本可以解决此类问题&#xff1a;https://gitee.com/layui/layui/issues/I40UJ9 但是此文章中的项目比较老以及页面功能都比较多升级layui版本可能会影响比较大&#xff0c;所以就对layui源码进行微调…

layui表格使用自定义模板templet

前言 在前文 layuispringboot实现表格增删改查 中&#xff0c;我们展示了如何使用layui将数据库数据渲染到前端表格中&#xff0c;但现在问题来了&#xff0c;如果不加特殊处理&#xff0c;前端表格直接显示数据库存储信息是不合适的&#xff0c;例如数据库有一个类型字段&…

layui 动态表格 templet模板函数

1&#xff0c;需求说明 关于动态标题栏的相关知识跳转链接&#xff1a;layui 静态 动态复杂多表头 2&#xff0c;尝试的用法 var chenbenkemuList${chenbenkemuList};var columnAry[]for (var i 0; i < chenbenkemuList.length; i) {var onechenbenkemu chenbenkemuList[…

layui:templet

在使用layui-table的时候,由于它每次都是动态刷新,无法保存我们做的一些页面上元素的修改。 我希望我设置完默认地址之后,下次访问应该是和这次一样变成了灰色的。 这个时候要用到templet,官方文档中的{{d}}就是table获取回来的data,直接做判断,设置样式即可! <

LayUi 之 templet

templet是什么东西&#xff1f; 我们都知道LayUi中有模板&#xff0c;就是把我们需要展示的东西放在模板中展示&#xff0c;你就比如我们想要展示一些数据&#xff0c;但是这些数据不是我们想要的数据或者不是我们想要的样子&#xff0c;这个时候我们可以通过模板前端更改一下…

Jstack线程状态BLOCKED/TIMED_WAITING/WAITING解释

一、线程5种状态 1.新建状态&#xff08;New&#xff09; 新创建了一个线程对象。 2.就绪状态&#xff08;Runnable&#xff09; 线程对象创建后&#xff0c;其他线程调用了该对象的start()方法。该状态的线程位于可运行线程池中&#xff0c;变得可运行&#xff0c;等待获取C…

java线程状态(六种五种)

java线程的状态常见的有两种说法&#xff0c;一种是将其分为6种一种是分为5种 1. 六种&#xff1a; 划分依据&#xff1a;主要是从java代码的角度来进行划分。 1. 新建状态 &#xff1a; 使用new关键字创建一个thread对象&#xff0c;刚刚创建出的这个线程就处于新建状态。在…

统计Java进程中的线程状态(jstack+linux)

统计Java进程中的线程状态 第一步&#xff1a;查看Java进程ID 第二步&#xff1a;使用jstack命令dump线程信息&#xff0c;看看pid45890进程中的线程都是什么状态 /usr/local/java/jdk1.8.0_144/bin/jstack 84976 >/opt/test.dump第三步&#xff1a;统计所有线程分别处于什…

线程状态图

1. 新建状态(New) : 线程对象被创建后&#xff0c;就进入了新建状态。例如&#xff0c;Thread thread new Thread()。 2. 就绪状态(Runnable): 也被称为“可执行状态”。线程对象被创建后&#xff0c;其它线程调用了该对象的start()方法&#xff0c;从而来启动该线程…