前情提要:
1、在vue2中,一些非规范操作下,对象和数组对应的视图绑定不会正确更新,可用到$forceUpdate重新渲染视图来 更新页面视图,但是规范推荐的是使用vue的 `set` api,所以该用途不作为实际优雅场景,pass掉这个用途。


2、在vue3的setup中,视图绑定非响应式的引用类型,修改后正常是不会更新的,使用$forceUpdate后则会更新,但绑定的是非响应式基础类型数据,那$forceUpdate后也不会更新。
不管是哪种使用情况,都完全不是 $forceUpdate 的合理应用场景,此处也pass掉这个用途。


3、vue3中会触发`beforeUpdate`和`updated`的2个周期,但不触发`renderTriggered`,说明在vue3中,这对响应式数据的重新渲染并没任何帮助,并且vue3里不存在响应式数据更改后不会正确更新视图的情况了。所以这第三点的用途也pass掉

个人认为又不存在事件操作视图绑定的普通引用类型,然后来重新调$forceUpdate的铁憨憨操作。(在第五点被推翻~)


4、主动触发`beforeUpdate`和`updated`的2个周期:使用`$forceUpdate`,会触发这2个生命周期。

但是说实话,`beforeUpdate`和`updated`的优雅应用场景我至今没碰到过,有经验的请留言赐教~

但是从这点上进行考虑,个人得出的结论就是:(几乎)任意数据的修改都会触发的事件,可用 `$forceUpdate` 进行相关的内部其他操作。


5、控制更新(处理边界情况)

得益于其响应性系统,Vue 总是知道何时更新 (如果你使用正确的话)。但是,在某些边缘情况下,你可能希望强制更新,尽管事实上没有任何响应式数据发生更改。
还有一些情况下,你可能希望防止不必要的后续更新(操作数据,但不更新后续对应视图内容,则不使用响应式数据;或者在有需要的时候,在合适的时机使用`$forceUpdate`更新这部分视图内容)。

#强制更新

如果你发现自己需要在 Vue 中强制更新,那么在 99.99% 的情况下,你已经在某个地方犯了错误。例如,你可能依赖于 Vue 响应性系统未跟踪的状态,比如在组件创建之后添加了 data 属性。

但是,如果你已经排除了上述情况,并且发现自己处于这种非常罕见(几乎不可能)的情况下,必须手动强制更新,那么你可以使用 $forceUpdate。


6、兼容迁移到vue3:库&项目

综上4、5点所述还是有点用,再加上库开发、迁移,项目版本迁移的因素,若是有用到这API的,在这点上也就不用进行修改,所以在这点因素上,也有可能是保留该API的考虑之一。

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐