美文网首页
vue 不常用的API --- $forceupdate

vue 不常用的API --- $forceupdate

作者: suliang2010 | 来源:发表于2023-03-16 23:18 被阅读0次

    场景描述

    在vue的世界中,MVVM 框架的数据驱动视图变化,这是一种常识;不过,有没有可能,我们在变更数据之后,视图居然不会进行变化的情况呢?

    vue的数据双绑

    vue 的核心底层逻辑就是 通过数据劫持来实现双向绑定的;其中vue2.X 是 object.defineproperty 实现的defineReactive 函数;vue3.x 是proxy实现的reactivity 响应式;那么我们就来讨论下什么情况下会造成数据劫持失败~

    defineproperty 的天然缺陷

    作为js 早期支持的api, defineproperty 本身就是对对象已经存在key进行get,set拦截处理;当一个不存在的key加入到了已经被 defineReactive 之后的对象中,会发生什么?oh,数据的双绑失效了;然后才有了补救措施一样的 $set;

    作为es6 支持的proxy 天然支持对对象的 get,set 支持;但是对本身是 基本基础类型无爱,所以又衍生出了 ref api;

    言归正传,使用场景

    $forceupdate 从api名字上面能够得出,这是要用于强制更新的;而强制更新的内容,正式我们的视图;什么情况下我们需要用到这个api呢?

    • 当需要 $set 而因为一些原因没有使用,可以用 $forceupdate,强制更新;
    • 当因为data 对象的层级过深,明明可以观测到已经有了数据变化,但是视图没有更新的时候,可以使用;
    • 当数据用于展示样式的呈现时,明明样式已经挂载,但是视图就是没有生效时,可以使用;
    • 当定义的数据本来就不是 双向绑定的数据,在一定操作后,想要进行数据呈现时,可以使用;
    • 当你认为需要进行强制更新界面的时候,可以使用;

    声明

    本api $forceupdate, 适用于 vue2.x 和 vue3.x
    使用方式为: this.$forceupdate() ; 此处需要组件实例,请注意 vue3.x setup 中不存在this;

    以上~ 谢谢大家~

    相关文章

      网友评论

          本文标题:vue 不常用的API --- $forceupdate

          本文链接:https://www.haomeiwen.com/subject/tcwdrdtx.html