问题的原因: 无法找到setData这个定义,因为setData中是onLoad函数中的方法中的子节点, 无法使用this 解决办法: 这个时候需要在方法的开始部分定义var that = this,...然后用that.setData来重置,这样就解决了这个问题了。
无处不在的 setData --- 几乎每个开发者都会用到setData,要是在复杂的页面中,写了很多的setData,然后我们会发现页面真的是延迟严重,甚至卡顿、假死。...官方在性能优化中有提到: 避免频繁的去 setData。 避免每次 setData 都传递大量新数据。 后台态页面进行 setData。 但是到底是为什么呢?...(可参考《小程序的底层框架》) 把开发者的 JS 逻辑代码放到单独的线程去运行,因为不在 Webview 线程里,所以这个环境没有 Webview 任何接口,自然开发者就没法直接操作 DOM,也就没法动态去更改界面...一般来说计算过程如下: 用JS对象模拟DOM树。 一个真正的DOM元素非常庞大,拥有很多的属性值。而其中很多的属性对于计算过程来说是不需要的,所以我们的第一步就是简化 DOM 对象。...即用户传输的数据,需要将其转换为字符串形式传递,同时把转换后的数据内容拼接成一份 JS 脚本,再通过执行 JS 脚本的形式传递到两边独立环境。
无处不在的 setData ---- 几乎每个开发者都会用到setData,要是在复杂的页面中,写了很多的setData,然后我们会发现页面真的是延迟严重,甚至卡顿、假死。...官方在性能优化中有提到: 1.避免频繁的去 setData。 2.避免每次 setData 都传递大量新数据。 3.后台态页面进行 setData。 但是到底是为什么呢?...(可参考上期干货《小程序的底层框架》) 把开发者的 JS 逻辑代码放到单独的线程去运行,因为不在 Webview 线程里,所以这个环境没有 Webview 任何接口,自然开发者就没法直接操作 DOM,也就没法动态去更改界面...一般来说计算过程如下: 1.用JS对象模拟DOM树。 一个真正的DOM元素非常庞大,拥有很多的属性值。而其中很多的属性对于计算过程来说是不需要的,所以我们的第一步就是简化 DOM 对象。...即用户传输的数据,需要将其转换为字符串形式传递,同时把转换后的数据内容拼接成一份 JS 脚本,再通过执行 JS 脚本的形式传递到两边独立环境。
1.修改对象属性 1>第一种 changePerson:function(e){ var str = 'person.name'; this.setData({ [str]...: 'fxjzzyo' }) }, 2>第二种 changePerson:function(e){ this.setData({ 'person.name': 'fxjzzyo...' }) }, 2.修改数组属性 this.setData({ ["array[" + index + "].amount"]: amount, });
脚本,再通过执行 JS 脚本的形式传递到两边独立的环境 02 setData两个重要的参数 从官方文档中看到这句Page.prototype.setData(Object data, Function...引起的界面更新渲染完毕后的回调函数 为了便于理解,在小程序中创建一个 page 页面,名为setdata,如下是逻辑层 js 文件 // miniprogram/pages/setdata/setdata.js...">更改data中数据 而在逻辑层 JS // miniprogram/pages/setdata/setdata.js Page({ /** * 页面的初始数据 *.../setdata.js Page({ /** * 页面的初始数据 */ data: { person: { name: "随笔川迹", sex: "...渲染有出现延时,由于WebView的 JS 线程一直处于忙碌状态,所以,逻辑层到页面层的通信耗时上升,视图层收到的数据消息时距离发出时间已经过去了几百毫秒,渲染的结果并不是实时的 避免 setData
微信小程序 setData 工作原理 小程序的视图层目前使用 WebView 作为渲染载体,而逻辑层是由独立的 JavascriptCore 作为运行环境。...即用户传输的数据,需要将其转换为字符串形式传递,同时把转换后的数据内容拼接成一份 JS 脚本,再通过执行 JS 脚本的形式传递到两边独立环境。...微信小程序 setData 性能 1. setData调用频率 setData接口的调用涉及逻辑层与渲染层间的线程通信,通信过于频繁可能导致处理队列阻塞,界面渲染不及时而导致卡顿,应避免无用的频繁调用
对于setData普通数据类型而言,没什么讲究 但是对于数组而言,再直接修改一个完整的数组显得有些多余,首先写着不简易,其次效率很是滴。 比如 ? 你都能觉得复杂,官方肯定是有对应的优化的。...Page({ data: { array: [{text: 'init data'}], }, changeItemInArray: function() { this.setData
在微信小程序中,setData是一个常用的操作,但是setData是一个异步操作,也就是说在setData代码后使用data里面的数据,不一定就是已经更新了的数据。...但是微信小程序给我们提供了一个方法,也就是回调函数 this.setData({ id:"0" },()=>{ console.log(this.data.id); }) 通过该回调函数可以方便的等待...data:{ options:{} }, onload:function(options){ this.setData({ options:options },(){
微信小程序setData()使用: ##Page.prototype.setData(Object data, Function callback) setData 函数用于将数据从逻辑层发送到视图层...注意: 直接修改this.data,而不调用this.setData(),是无法改变当前页面的状态的,会导致数据不一致 仅支持可以JSON化的数据 单次设置的数据不能超过1024KB,尽量避免一次设置过多的数据...** * 生命周期函数--监听页面加载 */ onLoad: function (options) { } }) 在页面中显示: 在onLoad()函数中调用setData...() onReady: function () { this.setData({ value:"调用setData()修改后的值" }) }, 再次运行:...完整代码如下: //js代码 onLoad: function (options) { console.log(options); var that = this; var userid
前言:微信小程序中经常需要用到this.setData({})把变量值渲染到视图层,那到底什么是this.setData,如何使用?需要注意哪些?...test02======={{test02}} 测试 index.js...频繁的去 setData 在我们分析过的一些案例里,部分小程序会非常频繁(毫秒级)的去setData,其导致了两个后果: Android 下用户在滑动时会感觉到卡顿,操作反馈延迟严重,因为 JS...线程一直在编译执行渲染,未能及时将用户操作事件传递到逻辑层,逻辑层亦无法及时将操作处理结果及时传递到视图层; 渲染有出现延时,由于 WebView 的 JS 线程一直处于忙碌状态,逻辑层到页面层的通信耗时上升...JS 线程, 3.
getClientCnxnSocket(), canBeReadOnly); cnxn.start(); } 初始化过程的泳道图如下 请求处理(SetData...服务端对于SetData请求的处理,大体可以分为4大步骤,分别是请求的预处理、事务处理、事务应用和请求响应 流程逻辑大概如下所示: 预处理 I/O层接收来自客户端的请求。...对于SetData请求,因为此时已经完成了会话创建,因此按照正常的事务请求进行处理。 将请求交给ZooKeeper的PrepRequestProcessor处理器进行处理。...无论对于会话创建请求还是SetData请求,或是其他事务请求,事务处理流程都是一致的,都是由ProposalRequestProcessor处理器发起,通过Sync、Proposal和Commit三个子流程相互协作完成的
在微信小程序中经常会使用到setData函数把变量渲染到视图层,那么什么是setData呢?如何使用?注意事项有些什么?下面我们就来详细了解一下!...1 setData()方法 setData是小程序开发中使用最频繁的接口,也是最容易引发性能问题的接口。...,操作反馈延迟严重,因为 JS线程一直在编译执行渲染,未能及时将用户操作事件传递到逻辑层,逻辑层亦无法及时将操作处理结果及时传递到视图层; 渲染有出现延时,由于WebView 的 JS 线程一直处于忙碌状态...evaluateJavascript脚本过程,当数据量过大时会增加脚本的编译执行时间,占用WebView JS线程。...3.后台态页面进行setData 当页面进入后台态(用户不可见),不应该继续去进行setData,后台态页面的渲染用户是无法感受的,另外后台态页面去setData也会抢占前台页面的执行。
小程序代码片段代码地址: https://github.com/SHERlocked... 1. setData 不方便的地方 你在使用 setData 的时候,是不是有时候觉得很难受,举个简单的例子...这就是为什么我在上线的项目中使用 wx-updata,而不是 setData 2. wx-updata 的优点 支持 setData 对象自动合并,不用写蹩脚的对象路径了 ?...Eslint 报错,可以使用 wx-updata 提供的 Empty 来代替: [1, Empty, 3] 3. wx-updata 安装 你也可以直接把 dist 目录下的 wx-updata.js...一样使用 upData 了 // app.js import { updataInit } from '....) 第二个参数一样,引起界面更新渲染完毕后的回调函数 updataInit(Page, config) Page: 页面对象,需要在 app.js 中调用; config: 若提供配置参数 { debug
而微信小程序也只给我们提供了一个setData方法,这个方法是使用键值对的形式对数据进行修改,例如: this.setData({ name : 'leon' }) 回到我们刚刚的例子里,这时候...{ data: { array: [{text: 'init data'}], }, changeItemInArray: function (index) { this.setData...this.data.list[index] item.count = 100 // 依旧是根据index获取数组中的对象 var key = "list["+ index + "]" this.setData
视图层和逻辑层的数据传输,实际上通过两边提供的JavScript Core所实现,即用户传输的数据,需要将其转换为字符串形式传递,同时把转换后的数据内容拼接成一份 JS 脚本,再通过执行 JS 脚本的形式传递到两边独立的环境...test02======={{test02}} 3 测试 index.js...,因为JS线程一直在编译执行渲染,未能及时将用户操作事件传递到逻辑层,逻辑层亦无法及时将操作处理结果及时传递到视图层; 渲染有出现延时,由于WebView的JS线程一直处于忙碌状态,逻辑层到页面层的通信耗时上升...脚本过程,当数据量过大时会增加脚本的编译执行时间,占用WebView JS线程。...3、后台态页面进行setData 当页面进入后台态(用户不可见),不应该继续去进行setData,后台态页面的渲染用户是无法感受的,另外后台态页面去setData也会抢占前台页面的执行。
}) // behavior2.js module.exports = Behavior({ behaviors: [require('behavior3.js')], definitionFilter...) {}, }) // component.js Component({ behaviors: [require('behavior1.js')], }) 三、案例解析 // behavior.js..._originalSetData = this.setData // 原始 setData this.setData = this...._setData // 封装后的 setData } }, definitionFilter(defFields) { const computed = defFields.computed..._originalSetData // 原始 setData originalSetData.call(this, data, callback) // 做 data 的 setData
14.wx.showToast交互反馈 wx.showToast文档 post-detail.js添加个消息提示框 onCollectionTap: function(ev) { var postsCollected...15.音乐播放功能 音乐播放API文档 在posts-data.js里面给每篇文章添加一个music属性 music: { url: "http://music.163.com/song/media...'/images/music/music-stop.png': '/images/music/music-start.png'}}"> post-detail.js // 播放音乐...app.js绑定一个全局的变量(音乐播放状态) App({ globalData: { g_isPlayingMusic: false, g_currentMusicPostId:...null, }, }) post-detail.js var app = getApp(); Page({ data: { isPlayingMusic: false },
(utils.js)文件,作为一个模块; 模块只有通过 module.exports 或者 exports 才能对外暴露接口。...所以当你在util.js里封装的方法想要在外部使用的话,必须通过 module.exports 或者 exports 对外暴露 这就和CommonJS 模块化标准一致 ?...要引入上面默认的util.js 在调用函数时,传入new Date()参数,返回值是日期和时间 再通过setData更改Page()里面的data,动态更新页面的数据 var util = require.../utils/util.js'); // 调用函数时,传入new Date()参数,返回值是日期和时间 // 再通过setData更改Page()里面的data,动态更新页面的数据 onLoad:...this.setData({ show: true }) }, onConfirm(e) { this.setData({ show: false
index.js Page({ startCompass(){ wx.startCompass() }, stopCompass() { wx.stopCompass()...index.js Page({ data: { animationData: 0, compass:0 }, onShow: function () { var myThis...img.png'> {{compass}}° 这段代码中,我们首先在index.wxml文件中指定了指北针的图片,然后通过animation方法去等待index.js...index.js文件中,我们将wx.onCompassChange的返回值res.direction通过.toFixed(0)方法做了去小数处理,然后使用360减去与正北方向的夹角,得到图片需要旋转的度数...index.js Page({ data: { animationData: 0, angle:"北", compass:0 }, onShow: function
此时可以通过将页面的 setData 改为 自定义组件 中的 setData 来提升性能。 原因:自定义组件中的setData不会进行深复制。...需要使用多slot时,可以在组件js中声明启用。...( 计算属性的作用):是为了解决HTML代码中复杂的js代码(HTML代码中可以嵌套js代码),把复杂的js代码通过计算属性来解决 这是计算属性的应用??? 听着词这么厉害干这事真是大才小用了。...实现原理很简单,就是对已有的 setData 进行二次封装,在每次 setData 的时候计算出 computed 里各字段的值,这期间可以增加缓存机制,属性值没有变化的复用。...' }, }) // component.js Component({ data: { from: 'component }, behaviors: [require('behavior.js
领取专属 10元无门槛券
手把手带您无忧上云