微信小程序官方 setData 替代品
教程地址:<开发微信小程序,我为什么放弃 setData,使用 upData>
小程序代码片段预览地址: https://developers.weixin.qq.com/s/CcXdO1mc73jD
小程序代码片段代码地址: https://github.com/SHERlocked93/wx-updata-demo
- 支持 setData 对象自动合并,不用写蹩脚的对象路径了 🥳
- 支持对象中嵌套数组,数组中嵌套对象;
- 如果数组的某个值你不希望覆盖,请使用数组空位来跳过这个数组项,比如
[1,,3]
这个数组中间就是数组空位; - 如果数组空位你的 Eslint 报错,可以使用 wx-updata 提供的 Empty 来代替
[1, Empty, 3]
- 如果数组空位你不习惯,或者不乐意数逗号个数,可以试试数组的对象路径方式
[1,,3]
->{'[0]': 1, '[2]': 3}
你也可以直接把
dist
目录下的wx-updata.js
拷贝到项目里使用
$ npm i -S wx-updata
# or
$ yarn add wx-updata
然后:
- 把微信开发者工具面板右侧的
详情 - 本地设置 - 使用npm模块
按钮打开; - 点击微信开发者工具面板工具栏的
工具 - 构建npm
;
构建后成功生成 miniprogram_npm 文件夹就可以正常使用了
可以使用直接挂载到 Page 上的方式,这样就可以在 Page 实例中像使用 setData 一样使用 upData 了
// app.js
import { updataInit } from './miniprogram_npm/wx-updata/index' // 你的库文件路径
App({
onLaunch() {
Page = updataInit(Page, { debug: true })
}
})
// 页面代码中
this.upData({
info: { height: 155 },
desc: [{ age: 13 }, '帅哥'],
family: [, , [, , , { color: '灰色' }]]
})
有的框架可能在 Page 对象上进行了进一步修改,所以直接替换 Page 的方式可能就不太好了,wx-updata 同样暴露了工具方法,用户可以在页面代码中直接使用工具方法进行处理:
// 页面代码中
import { objToPath } from './miniprogram_npm/wx-updata/index' // 你的库文件路径
Page({
data: { a: { b: 2}, c: [3,4,5]},
// 自己封装一下
upData(data) {
return this.setData(objToPath(data))
},
// 你的方法中或生命周期函数
yourMethod() {
this.upData({ a: { b: 7}, c: [8,,9]})
}
})
data
: 你希望设置的 datacallback
: 跟 setData 第二个参数一样,引起界面更新渲染完毕后的回调函数
Page
: 页面对象,需要在app.js
中调用;config
配置- 配置参数
{ debug: true }
,会将路径化后的 data 打印出来,帮助用户进行调试,默认 false 不开启; - 配置参数
{ arrObjPath: true }
,会开启数组的对象路径方式功能,默认 false 不开启; - 配置参数
{ arrCover: true }
,数组会直接覆盖,而不会只修改数组的某几项,默认 false 不开启(设置 true,arrObjPath 会失效);
- 配置参数
data
: 你希望设置的 data 对象config
配置- 配置参数
{ arrObjPath: true }
,会开启数组的对象路径方式功能,默认 false 不开启; - 配置参数
{ arrCover: true }
,数组会直接覆盖,而不会只修改数组的某几项,默认 false 不开启(设置 true,arrObjPath 会失效);
- 配置参数
// 页面代码中
import { Empty } from './miniprogram_npm/wx-updata/index'
this.upData({
info: { height: 155 },
desc: [{ age: 13 }, '帅哥'],
family: [Empty, Empty, [Empty, Empty, Empty, { color: '灰色' }]]
})
如果数组空位你不习惯,或者不乐意数逗号个数,可以试试数组的对象路径方式,需要传递 config 的配置 {arrObjPath: true}
// 页面代码中
import { Empty } from './miniprogram_npm/wx-updata/index'
// 原来的方式
this.upData({
info: { height: 155 },
desc: [, '靓仔'],
family: [, , [, , , { color: '灰色' }]]
})
// 使用数组路径方式
this.upData({
info: { height: 155 },
desc: {'[1]': '靓仔'},
family: { '[2]': { '[3]': { color: '灰色' }
})