哈喽大家好!近在捣鼓微信小程序,被onLoad和onShow这两个小家伙折磨得够呛,感觉它们就像一对孪生兄弟,长得挺像,但仔细琢磨起来,又各有千秋。今天就来跟大家唠唠嗑,分享一下我的个人经验,希望能帮到同样被它们“困扰”的小伙伴们。
一开始,我也傻傻分不清楚它们俩,总觉得它们差不多,反正都是页面加载的时候调用的数嘛。后来,经过一番“血战”,我终于搞明白了它们的区别,也体会到了这其中的“妙处”。
简单来说,onLoad就像是一个“开场白”,页面次加载的时候,它会隆重登场,向你问好,并给你带来一些“见面礼”——也就是通过options传递过来的参数。而onShow则像是一个“主持人”,无论页面是初次加载还是从后台切换回来,它都会热情地“欢迎”你,并帮你处理一些事情。
举个栗子,假设你做了一个电商小程序,用户在商品详情页下单后,跳转到订单确认页。这时候,onLoad会在订单确认页次加载时执行,它会通过options获取到从商品详情页传递过来的商品信息,比如商品ID、商品名称、价格等等。而当你从其他页面返回到订单确认页时,onLoad就不会再执行了,因为它只在页面次加载时执行一次。但是,onShow会再次执行,它会帮你更新页面上的订单信息,例如订单状态、信息等等。
是不是感觉有点像舞台剧?onLoad是演员的次亮相,而onShow则负责在每幕演出开始时,引导观众进入剧情。
那么,到底什么时候该用onLoad,什么时候该用onShow呢?这就要看你的具体需求了。
如果你的页面需要在初始化时获取一些参数,并且这些参数在页面生命周期内不会改变,那么你就可以在onLoad中获取这些参数。比如,在商品详情页,你可以使用onLoad获取商品ID,然后根据商品ID请求商品数据。
如果你的页面需要在每次页面显示时更新数据,那么你就可以在onShow中更新数据。比如,在订单列表页,你可以在onShow中请求新的订单数据,并更新页面上的订单列表。
为了更清晰地说明,我做了个
数 | 执行时机 | 用途 | 参数 |
---|---|---|---|
onLoad | 页面加载时调用,仅调用一次 | 初始化数据,获取参数 | options (页面参数) |
onShow | 页面显示时调用,每次显示都会调用 | 更新数据,刷新界面 | 无 |
当然,实际应用中,可能还会遇到更复杂的情况。比如,你需要在onLoad中进行一些耗时的操作,例如网络请求,这时为了避免用户等待太久,你可能需要在页面上显示一个加载动画,并在onShow中更新数据后隐藏加载动画。或者,你需要在onShow中判断页面是否需要重新加载数据,避免不必要的网络请求。
onLoad和onShow就像两把不同的“武器”,只有灵活运用,才能更好地完成任务。 它们并不是相互排斥的,很多时候,我们会同时用到它们俩,让我们的页面更流畅,用户体验更好。
再举个例子,假设我开发了一个记账本小程序,用户可以在添加记账信息后,返回到记账列表页。如果我只在onLoad中请求记账列表数据,那么当用户返回记账列表页时,列表就不会更新新的记账信息。但如果我在onShow中请求记账列表数据,那么每次返回记账列表页时,列表都会显示新的数据,这就能保证数据的一致性。
有些同学可能会问,那onReady呢? onReady也属于页面的生命周期数,它会在页面渲染完成之后调用,通常用于一些初始化操作,比如设置页面初始化一些组件等等。它跟onLoad和onShow的区别在于,onReady只在页面次加载时调用一次,而且是在onLoad之后调用的。
我个人感觉,理解onLoad和onShow的关键,在于理解它们各自的执行时机和用途,以及它们之间的区别。 不要死记硬背,多动手实践,多做一些小程序,你就会逐渐掌握它们的用法。
我想问问大家,你们在开发小程序的过程中,有没有遇到过onLoad和onShow相关的难题?或者,你们有什么独到的经验和技巧可以分享?欢迎留言交流哦!