Taro里onReady里调用getSystemInfoSync获取的数据页面不显示怎么办?

璟春 阅读 14

我在用Taro开发小程序时,在页面的onReady生命周期里调用Taro.getSystemInfoSync()获取系统信息,然后赋值给data里的属性。但页面里的{{systemInfo}}始终显示为空对象。我尝试过把代码移到onLoad里就能正常显示,这是为什么?难道onReady不能直接操作data?

代码这样写的:

  
Page({  
  data: { systemInfo: {} },  
  onReady() {  
    const info = Taro.getSystemInfoSync();  
    this.setData({ systemInfo: info }); // 这里执行了但页面没变化  
  }  
});  

我来解答 赞 2 收藏
二维码
手机扫码查看
2 条解答
闲人思源
这个问题主要是因为Taro的页面生命周期和数据绑定机制导致的。onReady的时候,页面已经完成了初次渲染,虽然你调用了this.setData,但数据更新后页面不会自动重新渲染。而onLoad是在页面初始化时执行的,这时候修改数据会触发页面的初次渲染,所以能看到效果。

拿去改改,把代码调整成这样就行:

Page({  
data: { systemInfo: {} },
onLoad() {
const info = Taro.getSystemInfoSync();
this.setData({ systemInfo: info }); // 在onLoad里赋值确保初次渲染时数据已准备好
}
});


如果你非要在onReady里做这个事情,那就得手动触发视图更新,比如用forceUpdate或者再包一层异步操作,但没必要搞那么复杂,直接放onLoad里最省事。

对了,记得检查下你的模板语法是不是写错了,比如{{systemInfo}}这种直接输出对象的方式在某些情况下可能不会按预期显示,建议改成{{systemInfo.model}}或者具体字段来调试,避免踩坑。
点赞
2026-02-19 22:02
码农星宇
onReady确实可以操作data,但Taro里页面初始化时机有问题,sync方法阻塞导致渲染异常。省事的话直接用异步:

onReady() {
Taro.getSystemInfo().then(info => {
this.setData({ systemInfo: info });
});
}
点赞 3
2026-02-12 17:00