-
Notifications
You must be signed in to change notification settings - Fork 34
Skyline渲染模式重新进界面wxs模块中数据不初始化 #209
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Comments
webview 的 wxs 运行原理和 skyline 不同。简单来说, webview 上的 wxs 是需要在每个线程上分别执行的(每个页面是一个独立的线程), skyline 是纯粹的小程序生命周期内单实例的。 所以 wxs 中不应该保存状态。 |
现在的情况是WebView渲染时wxs不保存状态,但是skyline渲染时wxs保存状态。我的项目从WebView转成用Skyline后界面结果就与原来不一样了,费挺大劲才发现是这个原因。这算不算是Skyline的bug? |
我不是很清楚 skyline 具体的细节,不过从基础架构上看应该就是这样的了。应该也没法改,属于是可预见的非兼容性变更。 已经请求相关同事 document 相关详情。 |
P.S. 考虑到 webview 在特殊情况下可能会刷新重启——刷新然后尝试根据 data 恢复到刷新前的状态。在 webview 中保存 wxs 状态也是不可靠的,可能会丢失。 |
@LastLeaf 您好,打扰了,最近又碰到这个问题导致的bug了,这次不得不在wxs中保存状态。我们的小程序有个界面需要拖动图片,最近小程序迁移到Skyline后,重进这个界面第一次拖动图片会闪烁到上次退出界面前的位置。找了半天问题,最后想到这个bug。问题的原因是Wxs里记录了图片当前位置坐标,重进界面后界面里图篇的位置重置了,wxs里的数据没重置,一触发拖动图片直接跑到上次的坐标了。 |
另外还有个现象,半glass-easel下,也就是只开glass-easel不开Skyline在Windows和Android端,wxs中用log打印这些坐标的值也有问题。重进后打印的是前一次的值,也没重置,但实际界面上重置了。就是log跟实际情况对不上,log跟Skyline时一样,但界面实际是正常的。只有在Skyline下会闪现。 |
wxs 中的全局量是线程全局的,具体请参考这条回复: 非常重要:
当然并不是完全不能保存状态的。有个接口: https://developers.weixin.qq.com/miniprogram/dev/framework/view/interactive-animation.html 其中有个 getState 方法,可以把状态附着在节点上,这样状态就可以随着节点的生命周期销毁。(我没有仔细研究你的代码,粗看应该是可以解决这个问题的。) |
发现个使用Skyline引擎时会出现的问题。做了一个点击计数的界面,使用Skyline后出现异常。原本WebView渲染重新进界面计数器归零,用Skyline渲染重新进界面次数保留。





代码片段连接:https://developers.weixin.qq.com/s/Bjb9iQmx7BUP
代码截图:
Wxml:
Wxs:
Js:
跳转到计数界面,点几下计数,反回初始界面再跳转到计数界面。运行结果:
WebView渲染:
Skyline渲染:
js中的数据是都归零的。原本用WebView引擎时wxs模块中的全局变量是归零的,只有Skyline引擎下没有归零。
The text was updated successfully, but these errors were encountered: