我的编程空间,编程开发者的网络收藏夹
学习永远不晚

怎么使用Key对Vue组件进行重新渲染

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

怎么使用Key对Vue组件进行重新渲染

这篇文章主要介绍“怎么使用Key对Vue组件进行重新渲染”,在日常操作中,相信很多人在怎么使用Key对Vue组件进行重新渲染问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”怎么使用Key对Vue组件进行重新渲染”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

通过改变 key 的值来重新渲染组件

我最喜欢的方法是使用key属性,因为使用key 的方式,Vue 就知道了特定组件与特定数据相关。

如果 key保持不变,则不会更改组件。但是,如果key发生更改, Vue 知道它应该删除旧组件并创建一个新组件。

下面是一个非常基本的方法:

<template>   <ComponentToReRender     :key="componentKey"   /> </template>  <script>   export default {     data() {       return {         componentKey: 0,       };     },     methods: {       forceRerender() {         this.componentKey += 1;       }     }   } </script>

每次调用forceRerender时,componentKey 的值就会更改。当componentKey 的值发生改变时,Vue  就知道把ComponentToReRender组件删除并创建一个新组件。

这样ComponentToReRender就会重新渲染并重置里面的状态。nice nice!

强制多个子节点进行更新

同样用这种方式也可以用于多个子组件:

<template>   <div>     <Child       :key="key1"     />     <Child       :key="key2"     />   </div> </template>  <script>   export default {     data() {       return {         key1: 0,         key2: 0,       };     },     methods: {       forceRerender(child) {         if (child === 1) {           this.key1 += 1;         } else if( child === 2) {           this.key2 += 1;         }       }     }   } </script>

这里我们使用了两个单独 key 来分别控制每个子组件是否重新渲染。将它们分开是为了其中的一个子组件渲染,不会影响到另外另一个。

但如果希望两个子组件总是一起更新,则可以使用相同的 kye。但是,key必须是唯一的,所以下面这种方式,不能工作:

<template>   <div>     <Child       :key="componentKey"     />     <Child       :key="componentKey"     />   </div> </template>  <script>   export default {     data() {       return {         componentKey: 0,       };     },     methods: {       forceRerender(child) {         this.componentKey += 1;       }     }   } </script>

在这里,仅第一个Child组件会被渲染。第二个被忽略,因为它具有重复的key 了。

为了解决这个问题,我们可以基于componentKey为每个孩子构造一个新key:

<template>   <div>     <Child       :key="`${componentKey}-1`"     />     <Child       :key="`${componentKey}-2`"     />   </div> </template>  <script>   export default {     data() {       return {         componentKey: 0,       };     },     methods: {       forceRerender(child) {         this.componentKey += 1;       }     }   } </script>

因为我们每次在componentKey后面添加-1和-2,所以这两个key始终是唯一的,现在这两个组件都将被重新渲染。

如果是在列表中,则可以使用如下方式:

<template>   <div>     <Child       v-for="(item, index) in list"       :key="`${componentKey}-${index}`"     />   </div> </template>  <script>   export default {     data() {       return {         list: [           // ...         ],         componentKey: 0,       };     },     methods: {       forceRerender(child) {         this.componentKey += 1;       }     }   } </script>

在这里,我们将key构造为${componentKey}-${index},因此列表中的每个项目都会获得唯一的key,只要componentKey一改变,列表中的所有组件将同时重新渲染。

当然,还有更简单的方式,就是用div把列表包裹起来,直接对 div重新更新就行了:

<template>   <div :key="componentKey">     <Child       v-for="item in list"       :key="item.id"     />   </div> </template>  <script>   export default {     data() {       return {         list: [           // ...         ],         componentKey: 0,       };     },     methods: {       forceRerender(child) {         this.componentKey += 1;       }     }   } </script>

到此,关于“怎么使用Key对Vue组件进行重新渲染”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注编程网网站,小编会继续努力为大家带来更多实用的文章!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

怎么使用Key对Vue组件进行重新渲染

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

使用React怎么对服务端进行渲染

使用React怎么对服务端进行渲染?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。服务器端编写 React 组件如果是客户端渲染,浏览器首先会向浏览器发送请求,服
2023-06-06

使用vue-simple-uploader怎么对文件进行分片上传

使用vue-simple-uploader怎么对文件进行分片上传?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。vue-simple-uploadervue-simple-u
2023-06-06

怎么使用uniapp组件对上传的图片进行压缩至1兆以内

这篇文章主要介绍“怎么使用uniapp组件对上传的图片进行压缩至1兆以内”,在日常操作中,相信很多人在怎么使用uniapp组件对上传的图片进行压缩至1兆以内问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”怎么使
2023-07-04

编程热搜

目录