NervJS / taro

开放式跨端跨框架解决方案,支持使用 React/Vue/Nerv 等框架来开发微信/京东/百度/支付宝/字节跳动/ QQ 小程序/H5/React Native 等应用。 https://taro.zone/
https://docs.taro.zone/
Other
34.82k stars 4.72k forks source link

【harmony-hybrid】解决返回时上一个页面瞬间白屏的问题 #15576

Closed heweishui closed 4 days ago

heweishui commented 2 weeks ago

这个 PR 做了什么? (简要描述所做更改)

解决返回时上一个页面瞬间白屏的问题

这个 PR 是什么类型? (至少选择一个)

这个 PR 涉及以下平台:

taro-bot2[bot] commented 2 weeks ago

欢迎提交 PR~ Taro 非常感谢您对开源事业做出的贡献!🌷🌷🌷

一般 PR 会在一到两周内进行 review,成功合入后会随下一个版本进行发布。

Review 需要耗费大量时间,所以请遵循以下规范,协助我们提高 review 效率🙏🙏🙏

  1. 详细介绍 PR 的背景(非常重要,例如解决了什么问题,该问题如何复现等)
  2. 确保 CI 顺利运行。
  3. 最好能提供对应的测试用例。

为了更好地进行沟通,请加入 Taro 开发者微信群:

taro-bot2[bot] commented 2 weeks ago

欢迎提交 PR~ Taro 非常感谢您对开源事业做出的贡献!🌷🌷🌷

一般 PR 会在一到两周内进行 review,成功合入后会随下一个版本进行发布。

Review 需要耗费大量时间,所以请遵循以下规范,协助我们提高 review 效率🙏🙏🙏

  1. 详细介绍 PR 的背景(非常重要,例如解决了什么问题,该问题如何复现等)
  2. 确保 CI 顺利运行。
  3. 最好能提供对应的测试用例。

为了更好地进行沟通,请加入 Taro 开发者微信群:

ZEJIA-LIU commented 1 week ago

请简单描述一下复现路径和可复现demo,方便我进行验证

kongxiaojun commented 1 week ago

说明: willshow是为了解决返回白屏问题,路由跳转的时候会把上一页设置为display hidden,返回上一页的动画执行结束才会把hidden去掉。willshow的时机是在返回动画执行之前调用,提前把hidden去掉 复现步骤: 任意一个包含多page的sample,使用H5模式编译,从A页跳转到B页后再点击返回按钮,可以观察到返回动画执行过程中A页面未显示,只有在返回动画执行完成后A页面才会显示出来。如果不明显可以把A页面的背景设置为深色,可以明显的看到白屏效果。

ZEJIA-LIU commented 1 week ago

说明: willshow是为了解决返回白屏问题,路由跳转的时候会把上一页设置为display hidden,返回上一页的动画执行结束才会把hidden去掉。willshow的时机是在返回动画执行之前调用,提前把hidden去掉 复现步骤: 任意一个包含多page的sample,使用H5模式编译,从A页跳转到B页后再点击返回按钮,可以观察到返回动画执行过程中A页面未显示,只有在返回动画执行完成后A页面才会显示出来。如果不明显可以把A页面的背景设置为深色,可以明显的看到白屏效果。

这个问题可以通过css来实现即可。目前在路由这一块的逻辑已经足够复杂,再添加生命周期 willshow 感觉有点多余,因为他做的事情其实是和show相似的。 建议在 packages/taro-router/src/style.ts 这个文件里面,修改.taro_page_shade相关的css为:

  .taro_page_shade:has(+.taro_page_stationed),
  .taro_router > .taro_page.taro_page_show.taro_page_stationed:not(.taro_page_shade):not(.taro_tabbar_page):not(:last-child):has(+.taro_page_stationed) {
    display: none;
  }
ZEJIA-LIU commented 1 week ago

.taro_page_shade:has(+.taro_page_stationed), .taro_router > .taro_page.taro_page_show.taro_page_stationed:not(.taro_page_shade):not(.taro_tabbar_page):not(:last-child):has(+.taro_page_stationed) { display: none; }

我又想了一下,当页面存在tab页面的时候,页面上的dom排序和路由的history排序并不一致,因为tab页面并不会被删除,所以应该没办法使用css来解决

ZEJIA-LIU commented 1 week ago

说明: willshow是为了解决返回白屏问题,路由跳转的时候会把上一页设置为display hidden,返回上一页的动画执行结束才会把hidden去掉。willshow的时机是在返回动画执行之前调用,提前把hidden去掉 复现步骤: 任意一个包含多page的sample,使用H5模式编译,从A页跳转到B页后再点击返回按钮,可以观察到返回动画执行过程中A页面未显示,只有在返回动画执行完成后A页面才会显示出来。如果不明显可以把A页面的背景设置为深色,可以明显的看到白屏效果。

当多个页面存在,连续多次进行返回的时候,这么改也解决不了问题,你不如提一个pr把,这个问题修改起来有点复杂

ZEJIA-LIU commented 6 days ago

该问题已解决, 可参考pr https://github.com/NervJS/taro/pull/15659 跟周五版本