美文网首页
微信小程序列表状态缓存和生命周期的那些故事

微信小程序列表状态缓存和生命周期的那些故事

作者: zpkzpk | 来源:发表于2019-03-26 15:37 被阅读0次

           先说结论,平时tabBar中Page的onLoad生命周期只会触发一次,离开页面不会触发onUnload,再次进入也不会触发onLoad,但是在从分享进入时页面状态会重置,会先触发onUnload,再次回到该页面data会初始化,并触发onLoad生命周期,但是App的onLaunch不会重复触发,所以在getApp中存的全局变量不会改变,此时需要注意状态的同步的问题。

           当我们在tabBar中(tabBar中Page的onload只会渲染一次,从普通Page回到tabBar不会再次触发tabBar中Page的onLoad)写了一个列表页,希望这个页面列表只渲染一次,方便记录用户的操作位置,但是又希望从某些页面进入或者修改了某些参数之后再进入列表页,列表会自动刷新。

           乍一看可能我们只需要把列表的请求写在onLoad生命周期里,加个下拉刷新供用户使用就可以了,但是其实往往进入页面时(onShow)需要进行一些登录和权限的检测,所以列表请求往往会写在这些检测的异步回调中,所以等于每次进入页面都会请求列表,这时候我们就需要一个全局变量来控制列表的请求,在请求之后把这个变量置为false禁止再次请求,在进行了某些特殊操作后再把这个全局变量改成true打开请求。等到小程序长期不操作被内存释放后再进入小程序,全局变量也变成了初始状态,简直完美!

           一开始我想的就是这么简单,但是过了会就被提了bug,点击右上角的x小程序还是在微信后台运行的,如果你直接在微信的下拉中打开小程序,只会触发一些onShow生命周期,所有的状态都有缓存,onLoad也不会触发,但是这时我通过分享的卡片进入微信小程序,tabBar对应的Page会重新初始化,data会回到初始状态,onLoad生命周期也会重新加载,但是在App的全局变量还保持着原先的状态,也就是false状态,这时我不能发起新的请求,导致我页面上的列表是空的~

           简单的解决方案在app的onShow里或者对应tabBar的onUnload里改变全局变量的值即可

    相关文章

      网友评论

          本文标题:微信小程序列表状态缓存和生命周期的那些故事

          本文链接:https://www.haomeiwen.com/subject/aiggvqtx.html