温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

Vue中的$forceUpdate()怎么使用

发布时间:2022-04-02 15:47:39 来源:亿速云 阅读:659 作者:iii 栏目:开发技术

这篇文章主要讲解了“Vue中的$forceUpdate()怎么使用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Vue中的$forceUpdate()怎么使用”吧!

    $forceUpdate()的使用

    在Vue官方文档中指出,$forceUpdate具有强制刷新的作用。

    Vue中的$forceUpdate()怎么使用

    那在vue框架中,如果data中有一个变量:age,修改他,页面会自动更新。

    但如果data中的变量为数组或对象,我们直接去给某个对象或数组添加属性,页面是识别不到的

    <template>
      <p>{{userInfo.name}}</p>
      <button @click="updateName">修改userInfo</button>
    </template>
    <script>
      data(){
        return{
          userInfo:{name:'小明'}
        }
      },
      methods:{
        updateName(){
          this.userInfo.name='小红'
        }
      }
    </script>

    在updateName函数中,我们尝试给userInfo对象修改值,发现页面其实并没有变化

    有两种解决方法 

    方法一
    methods:{
      updateName(){
        this.userInfo.name='小红'//在此时,确实已经将userInfo对象修改完成
        console.log(this.userInfo.name);//输出结果: 小红
        this.$forceUpdate();//在这里,强制刷新之后,页面的结果变为'小红'
      }
    }
    方法二
    methods:{
      updateName(){
        this.$set('userInfo',name,'小红');
      }
    }

    关于$forceUpdate的一些理解

    在官方文档上仅仅有这一句话

    迫使 Vue 实例重新渲染。注意它仅仅影响实例本身和插入插槽内容的子组件,而不是所有子组件。

    我的理解是,所谓重新渲染,仅仅是指重新渲染DOM并与原有的DOM做code diff。对于有变更的,渲染到页面。结合官方解释,可以确认有两点不会发生:

    • 不会重新触发生命周期钩子函数,比如mounted

    • 不会渲染子组件的更新,即使子组件的props发生改变了。

    既然如此,什么场景下会需要使用呢?

    我们知道,在Vue中,响应数据发生改变后,会自动触发更新,但有一些条件,不会触发更新,比如数组的一些方法,或者添加data中并未提前定义的响应式数据。

    举个例子:

    假设有一个列表需要渲染,我们在data中初始化了这个列表,并在mounted函数中通过fill去填充这个数组。fill这个api是不会触发自动更新的。

    <template>
      <div class="hello">
        <div>
          <span v-for="(item, index) in arr" :key="index">{{ item }}</span>
        </div>
        <hello-world ref="hello" :list="arr" />
      </div>
    </template>
    <script>
    import HelloWorld from "@/components/HelloWorld.vue";
    export default {
      name: "About",
      components: {
        HelloWorld,
      },
      data() {
        return {
          arr: Array(4),
        };
      },
      mounted() {
        this.arr.fill(0);
        setTimeout(() => {
          this.$forceUpdate();
        }, 3000);
        setTimeout(() => {
          this.$refs.hello.$forceUpdate();;
        }, 5000);
      },

    在上面的示例中,页面会在3秒后才看到更新,子组件会在5秒后看到更新。这也就解释了forceUpdate的含义。

    即强制更新因某些原因并未渲染到页面的,已经改变的,应该被渲染到页面的数据。

    他所影响的仅仅是【触发render函数生成DOM -> 与原DOM 进行diff -> 更新视图】这个过程。 

    感谢各位的阅读,以上就是“Vue中的$forceUpdate()怎么使用”的内容了,经过本文的学习后,相信大家对Vue中的$forceUpdate()怎么使用这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是亿速云,小编将为大家推送更多相关知识点的文章,欢迎关注!

    向AI问一下细节

    免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

    vue
    AI