- 当前 Bug 的表现(可附上截图)
在真机上同一页面内 同时使用WXS与setInterval时,WXS内的funtion会重复调用
在微信开发者工具上并不会出现
- 提供一个最简复现 Demo
js代码:
data: {
test: '',
array: [1, 2, 3, 4, 5, 1, 2, 3, 4]
},
onLoad: function(options) {
let _this = this;
setInterval(() => {
console.log("这是计时")
_this.setData({
test: '这是计时'
})
},1000);
},
wxml代码:
<wxs module="m1">
var getMax = function(array) {
var max = undefined;
for (var i = 0; i < array.length; ++i) {
max = max === undefined ?
array[i] :
(max >= array[i] ? max : array[i]);
}
console.log("max", max)
return max;
}
module.exports.getMax = getMax;
</wxs>
<view> {{m1.getMax(array)}} </view>
<view> {{test}} </view>
@官方大神 求意见和建议!!!!
楼主解决了吗?
我个人觉得是setData的渲染机制和页面的生命周期有关,
先是onload,这个时候,页面才刚开始启动还没有完全渲染出来,
再来是ready,才是渲染成型的阶段。
所以我个人猜想应该把定时器写在这里,会表现的好点
似乎有点不太合理
关注一下
https://developers.weixin.qq.com/miniprogram/dev/framework/app-service/page.html#%E7%94%9F%E5%91%BD%E5%91%A8%E6%9C%9F
计时器里的setData会触发页面重新渲染,页面在渲染的时候,就要重新执行你的getMax函数咯。
setData会刷新整个页面的重新渲染?
你提供的代码无法重现你所描述的问题。
是不是不同手机上不一样,我这是模拟器测试正常。
只有真机才会出现 微信开发者不会出现的
onLoad:
function
() {
let _this =
this
;
setInterval(() => {
console.log(
'这是计时'
)
_this.setData({
[
'test'
]:
'这是计时'
})
}, 1000);
}
你改一下这里再看看
这样是正常的现象吧?在页面里面调用了 一个function,然后去setData不是应该一直执行么?换个写法