Skip to content
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

条件渲染会受wxs响应次数影响,两次判断结果不同界面会卡住 #205

Open
202225feng opened this issue Oct 22, 2024 · 5 comments
Labels
invalid This doesn't seem right

Comments

@202225feng
Copy link

在Android和Windows平台上setData后wxs函数会响应两次,wx:if判断条件会受这个影响,当前后两次判断结果不同时会出错,界面会卡住。
写了一个用wx:if进行条件渲染的片段。一个按钮点击计数,计数达到5之后显示一个view。在开发工具上点击五次后会正常出现view再点消失。在Android上点两次后会卡住,view不出现,再点没反应。Windows上点一次就会卡住。
代码片段连接:https://developers.weixin.qq.com/s/kYIcWUmW7qUA
开发工具上情况:

wxif开发工具

Android上的情况,下为调试log,点两次后报错卡住,后续点击有log但界面不变:

wxifAndroid

Windows上的情况,左为调试log,点击一次就会报错卡住,后续点击有log但界面不变:

wxifW1
wxifW2
wxifW3

代码:

微信截图_20241014152943
微信截图_20241014152951

@LastLeaf
Copy link
Member

关于为什么会不同,请参考 #203

首先,在实践中不应该用上述实现方式,因为 WXS 函数执行与模板更新有关,而模板何时被更新是很难控制的。或者说, WXS 函数的返回值应只取决于它的参数。

在 glass-easel 上这个问题更加明显。出于性能考虑,在执行 setData 时, glass-easel 有时甚至会跳过部分模板片段!这就是为什么 MT.ShowIfCount 有时不被执行。

@202225feng
Copy link
Author

其实不是MT.ShowIfCount不被执行,而是每次点击在Android和Windows都上被执行了两次,但界面只显示第一次的值。因为使用的是全局变量,前后两次返回值不同,当判断结果不同且view是从无到现实就报错,界面卡住,再点击没反应。

@LastLeaf
Copy link
Member

我试了一下代码片段,在 android 上 IfCount 是被执行了的(有 wxs 里面的日志),但是 =5 的时候遇到了一个 bug 导致没显示出来。

(这个 bug 不是 glass-easel 的 bug 所以无法用本项目独立复现。)

@LastLeaf
Copy link
Member

目前在启用 glass-easel 但未启用 skyline 的时候,在非开发者工具环境下, WXS 函数可能会多运行一次。

@LastLeaf
Copy link
Member

已确认这个 bug 不是 glass-easel 的 bug 而是小程序环境上的 bug ,已经提给那边等待修复了。

@LastLeaf LastLeaf added invalid This doesn't seem right and removed wontfix This will not be worked on labels Oct 23, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
invalid This doesn't seem right
Projects
None yet
Development

No branches or pull requests

2 participants