收藏
回答

关于生命周期onReady的疑问

问题模块 框架类型 问题类型 API/组件名称 终端类型 微信版本 基础库版本
API和组件 小程序 需求 onReady 客户端 6.7.3 2.4.1


看了生命周期的图,个人理解onReady之前渲染的就是Page默认值的data值。

onReady之后则根据setData方法来reRender。

我使用Android手机测试,traceA页面到B页面的过程,发现有时会执行firstRender,有时候又不会。具体是怎么一个原因我暂时不知道。

如果在onLoad方法里执行一个异步方法,但是速度极快,理论上在firstRender之前就可以返回并赋值给data,那么我理解的是应该会和firstRender一起渲染出来。

然而事实上似乎并不是这样,而是都在onReady之后才被渲染。


我的疑问是,是否有办法将异步返回的数据(保证快于firstRender),在firstRender的时候一起渲染出来?或者是我的理解不对。



希望官方能给一个详细的解答,万分感谢

最后一次编辑于  2018-12-06
回答关注问题邀请回答
收藏

1 个回答

  • 卢霄霄
    卢霄霄
    2018-12-06

    你试试,初次渲染就弄个特别大的页面呢?按理说这样会让 onReady很晚才调。

    如果你要保证一起渲染,干脆 wx:if隐藏整个页面,你拿到数据了 再 setData显示出来

    2018-12-06
    赞同
    回复 4
    • Jimmy L
      Jimmy L
      2018-12-06

      感谢回复,其实是这样的,我用的wepy框架,今天突然发现原来有个方法onPrefetch,可以在A页面点击的时候就触发B页面的事件,

      达到使请求等在onload之前就触发,以此提升加载速度。

      但是我现在尝试了以后,trace里观察到的确请求提前了,但是render并没有变快多少。


      圈出来的是B页面的onload,小箭头是A页面的navigateTo开始,下方的小f是firstRender。

      实际上圈出来的部分就是我想加速渲染的东西,是一个promiseAll请求,他结束了想快速渲染出来的东西应该也出来了。后的request无所谓。

      但实际上我发现要在firstRender后,那个紫色的小块才rerender出来。这和我预期的不一样。很疑惑。

      2018-12-06
      回复
    • 卢霄霄
      卢霄霄
      2018-12-06回复Jimmy L

      可能和框架的实现有关。。小程序上本身没预加载这种东西,我在想是不是他在点击的时候,如果判断接下来有跳转,就先去触发B页面的一些方法,但是实际上并没有打开B页面。

      2018-12-06
      回复
    • 沙沙
      沙沙
      03-06

      很是疑惑onReady 为初次渲染,初次渲染包含哪些?是初始化定义的默认data吗?onReady时间 - onLoad时间  这个时间差内,小程序做了哪些操作呢?

      03-06
      回复
    • 卢霄霄
      卢霄霄
      03-06回复沙沙

      默认就是Page({data})的值,生命周期可以参考这个链接

      https://developers.weixin.qq.com/miniprogram/dev/framework/app-service/page.html#%E7%94%9F%E5%91%BD%E5%91%A8%E6%9C%9F

      03-06
      回复