Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
🤔 这个 PR 的性质是?
🔗 相关 Issue
调用Dialog instance destroy方法后未清除滚动锁定class
复现地址:
https://codesandbox.io/p/devbox/y35jmd?embed=1&file=%2Fsrc%2FApp.vue
💡 需求背景和解决方案
问题:当使用Dialog instance的destroy后未清除body上的滚动锁定class
分析:
1、在调用destory时,会触发popup组件中的innerVisible的变更,从而触发Transition的onAfterLeave回调
2、在popup的onAfterLeave回调中会更改popup的wrapperVisible的值并调用props.onClosed方法
3、props.onClosed为Dialog中create函数初始化,create函数中触发了用户传入的onClosed回调和app卸载方法
4、app.unmount时会清除所有副作用并触发组件的onBeforeUnmount钩子函数,导致useLockScroll中watch(shouldLock)副作用函数未执行。而在onBeforeUnmount的钩子函数中,shouldLock(可变)拿到最新的值为fasle,从而未触发unlock方法。
修复思路:
修改影响范围最小化,在create函数的onClosed回调中,将app卸载放在nextTick中,让副作用函数执行后卸载。
📝 更新日志
fix(dialog): 修正destroy未清除滚动锁定class
本条 PR 不需要纳入 Changelog
☑️ 请求合并前的自查清单