Subscribe on changes!

在vite+vue的开发环境中keepAlive在热更的时候没有正确执行,新的vNode shapeFlag为772

avatar
May 25th 2023

Vue version

vue 3.2.4 vite:2.9.5

Link to minimal reproduction

这个链接无法提供,我无法在最简单的项目提供复现

Steps to reproduce

我并没有搞懂这个问题出现的原因,而且我也不认为他是一个bug。起因是当前开发的一个项目keepAlive在热更的时候去卸载旧组件的时候没有使用keepAlive的instance去调用deactive而触发的一个报错,因为是在项目中,我并不能很确切的定位这个问题。但是我试了一个简单的版本,他是可以正常工作的。当对keepAlive组件执行activate的patch的过程中,因为当前组件被热更,所以旧组件会被强制卸载,然后重新渲染新的vNode,在patch的过程中,由于是keepAlive组件,所以他执行了activate,activate内部又执行了patch,在这个patch执行过程中,出现了这个错误 vNode的shapeFlag为772,在继续执行deactive这时的parentComponent指向了当前实例的instance而不是keepAlive的instance 所以抛出了异常 导致后续的mount没有更新完成。复现链接不好提供,因为我并没有确定他出现的具体原因,在此深感抱歉。vue版本3.2.4,这个错误可能是因为我没有正确使用vue。

What is expected?

解决开发环境的这个热更新问题

What is actually happening?

parentComponent.ctx.deactivate is not a function

System Info

No response

Any additional comments?

vite:2.9.5

avatar
May 25th 2023

image

avatar
May 25th 2023

没有简单的复现demo,我们没办法调查问题。 先关闭了,等有了复现,我再打开。

avatar
Sep 5th 2023

same error