Taro里onReady里调用getSystemInfoSync获取的数据页面不显示怎么办?
我在用Taro开发小程序时,在页面的onReady生命周期里调用Taro.getSystemInfoSync()获取系统信息,然后赋值给data里的属性。但页面里的{{systemInfo}}始终显示为空对象。我尝试过把代码移到onLoad里就能正常显示,这是为什么?难道onReady不能直接操作data?
代码这样写的:
Page({
data: { systemInfo: {} },
onReady() {
const info = Taro.getSystemInfoSync();
this.setData({ systemInfo: info }); // 这里执行了但页面没变化
}
});
onReady的时候,页面已经完成了初次渲染,虽然你调用了this.setData,但数据更新后页面不会自动重新渲染。而onLoad是在页面初始化时执行的,这时候修改数据会触发页面的初次渲染,所以能看到效果。拿去改改,把代码调整成这样就行:
如果你非要在
onReady里做这个事情,那就得手动触发视图更新,比如用forceUpdate或者再包一层异步操作,但没必要搞那么复杂,直接放onLoad里最省事。对了,记得检查下你的模板语法是不是写错了,比如
{{systemInfo}}这种直接输出对象的方式在某些情况下可能不会按预期显示,建议改成{{systemInfo.model}}或者具体字段来调试,避免踩坑。