老师,怎么理解方法调用总是会在重渲染发生时再次执行函数?

老师,怎么理解方法调用总是会在重渲染发生时再次执行函数?

问题描述:

老师,关于重渲染后总是会执行方法调用,我有点理不清这个逻辑,意思是指当这个vue实例里的任意一个元素发生改变,都会执行一遍method里的方法?我想了解的是vue这里的处理逻辑是什么样的?

例如下面代码,当点击反转按钮,更新的是content,但是也会导致另一个不相干的标签发生改变( {{caculate()}}改变了),我想知道的是 当点击 反转按钮时,vue都做了哪些事情?


相关代码

 const app=Vue.createApp({
            data(){
                return {
                    content:'helloworld',
                    message:'say hello',
                    a:5,
                    b:2
                }
            },
            computed:{
                total(){
                    // return this.a*this.b;
                    return Date.now();
                }
            },
            methods:{
                handleReverse(){
                    this.content=this.content.split('').reverse().join('');
                },
                caculate(){
                    // return this.a*this.b;
                    return Date.now();
                },
            },
            template:`
            <div>
                <span>{{content}}</span>
                <button v-on:click="handleReverse">反转</button>
            </div>
            <div>{{total}}{{message}}{{caculate()}}</div>
            `
        });
        const vm=app.mount('#root');


正在回答 回答被采纳积分+1

登陆购买课程后可参与讨论,去登陆

1回答
好帮手慕慕子 2022-10-12 09:42:47

同学你好, 问题解答如下:

1、理解有误,重渲染后默认不会执行method方法中的调用, 除非主动调用了method中的方法。

2、以同学的代码为例,点击按钮的时候,执行对应的事件函数handleReverse,改变content值,由于vue的底层原理实现是当数据改变时,视图会跟着刷新,可以简单理解为又重新解析template属性,所以会再次调用caculate()方法,导致页面中展示的此处数据也会跟着变化。

祝学习愉快~

  • 提问者 慕标5017459 #1

    老师,我又重新梳理和测试了下,我的理解是:

    1、当template某一个标签需要更新时,整个template都会重新渲染(非初始渲染,即所有 data里数据都读取缓存,即上一次计算后的结果),

    2、当data里某个数据更新,但是template里并没有使用这个数据,那么template是不会重新渲染的。

    即只有当视图层发生变化,才会导致整个视图层重渲。


    请问这样理解可对?



    2022-10-12 10:36:16
  • 好帮手慕慕子 回复 提问者 慕标5017459 #2

    可以这样理解,祝学习愉快~

    2022-10-12 10:52:17
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师