欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 健康 > 养生 > Vue 新指令 v-memo 案例精析与性能优化

Vue 新指令 v-memo 案例精析与性能优化

2025/9/23 4:12:52 来源:https://blog.csdn.net/chinayun_6401/article/details/140372605  浏览:    关键词:Vue 新指令 v-memo 案例精析与性能优化

        v-memo 用于缓存组件的渲染结果。它通过指定依赖项来决定何时重新渲染组件,只有当依赖项的值发生变化时,组件才会重新渲染,从而提高性能。

        使用场景:v-memo 适用于组件的渲染结果在依赖项不变的情况下不应该频繁更新的场景,例如某些复杂的计算结果或者需要频繁更新但依赖项相对稳定的数据。

        示例代码如下:

<body>  <div id="app">  <el-divider content-position="left">v-memo依赖项的值未发生改变</el-divider>  <el-row>  <el-col :span="12">  <p>添加v-memo</p>  <div v-memo="[info.name,info.age]">  <p>姓名:{{info.name}}</p>  <p>年龄:{{info.age}}</p>  <p>爱好:{{info.hobby}}</p>  </div>  </el-col>  <el-col :span="12">  <p>未添加v-memo</p>  <div>  <p>姓名:{{info.name}}</p>       <p>年龄:{{info.age}}</p>  <p>爱好:{{info.hobby}}</p>  </div>  </el-col>  <el-col :span="24">  <el-button type="primary" @click="updateInfo">更新数据</el-button>  </el-col>  </el-row>  <el-divider content-position="left">v-memo依赖项的值发生改变</el-divider>  <el-row>  <el-col :span="12">  <p>添加v-memo</p>  <div v-memo="[grade.chinese,grade.mathematics]">  <p>语文:{{grade.chinese}}</p>  <p>数学:{{grade.mathematics}}</p>  <p>英文:{{grade.english}}</p>  </div>  </el-col>  <el-col :span="12">  <p>未添加v-memo</p>  <div>  <p>语文:{{grade.chinese}}</p>       <p>数学:{{grade.mathematics}}</p>  <p>英文:{{grade.english}}</p>  </div>  </el-col>  <el-col :span="24">  <el-button type="primary" @click="updateGrade">更新数据</el-button>  </el-col>  </el-row>  </div>  
</body>  
<script>  const {createApp}=Vue;  const app=createApp({  data(){  return{  info:{  name:'Lucy',  age:'32',  hobby:'running'  },  grade:{  chinese:82,  mathematics:77,  english:102  }  }  },  methods:{  updateInfo(){  this.info.hobby='dance and drawing';  },  updateGrade(){  this.grade.chinese="成绩:72";  this.grade.english="口语成绩:30,读写成绩:80";  }  }  })  app.use(ElementPlus);  app.mount('#app');  
</script>  

        运行结果,截图如下:

        分析:

        对于 info 对象的更新:

        在未添加 v-memo 的部分,由于每次数据更新,整个组件都会重新渲染,所以当 info.hobby 的值从 “running” 变为 “dance and drawing” 时,姓名、年龄以及爱好的显示都会重新渲染。

        在添加了 v-memo 的部分,由于依赖项是 info.name 和 info.age,而更新的是 info.hobby,所以这部分不会重新渲染即姓名和年龄的显示保持不变,另外爱好的显示不会更新。

        对于 grade 对象的更新:

        在未添加 v-memo 的部分,由于数据更新,整个组件会重新渲染,所以当 grade.chinese 和 grade.english 的值发生变化时,语文、数学和英语的显示都会随之重新渲染。

        在添加了 v-memo 的部分,因为依赖项是 grade.chinese 和 grade.mathematics,而此次更新中 grade.chinese 的值格式发生了较大变化,致使相应部分重新渲染,于是语文的显示得以更新。此外,grade.english 也进行了更新,所以英语的显示已会更新。

        更新数据后,运行结果,截图如下:

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词