这篇文章主要介绍“vue强制组件刷新问题如何解决”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“vue强制组件刷新问题如何解决”文章能帮助大家解决问题。
在调用组件的时候,如果数据中只是某个属性变化(比如id)变化,在vue开发工具中看到变量值变化,但是组件上的数据就是不刷新
引用组件
<bulletMenuVue v-else-if="sNode.type == 'cBomb'" :data="sNode" />
sNode数据结构
{ "id": "gun2m2c4", "label": "子弹4", "type": "cBomb", "data": { "angle": 50, "mwr": { "checked": false, "band": 50, "dbi": 50 }, "slr": { "checked": false, "length": 50, "power": 50, "facula": 50, "size": 50 }, "irDetector": { "checked": false, "band": 50, "dbi": 50 }, "mwd": { "checked": false, "band": 50, "direction": 50, "angle": 50 } } }
当鼠标点击切换子弹过快时,会出现子组件不刷新的情况
先看值有没有return出去!如果没有return,子组件也是不响应的,watchEffect甚至监听不到
我们将提供一个key属性,以便 Vue 知道特定的组件与特定的数据片段相关联。如果key保持不变,则不会更改组件,但是如果key发生更改,Vue 就会知道应该删除旧组件并创建新组件。
我们可以将key分配给子组件,想重新渲染组件时,更新该key即可。这应该是强制Vue重新渲染组件的最佳方法
具体一点
把子弹的id当做key给组件,当作为key的id发生变化时,Vue将知道它必须销毁组件并创建一个新组件。我们得到的是一个子组件,它将重新初始化自身并“重置”其状态。
<bulletMenuVue v-else-if="sNode.type == 'cBomb'" :data="sNode" :key="sNode.id" />
例如我有一个表格,每次点击其中的一行弹出一个窗口,展示对应的信息,弹窗如下
<el-dialog :title="textMap[dialogStatus]" :visible.sync="dialogFormVisible" top="0"> <UserPage v-if="isShow" :userid="userid"/> </el-dialog>
可见弹窗里面加载的其实是一个组件,组件通过判断当前点击行的id来进行不同数据的渲染
发现,其实每次弹窗出来的数据都是第一次加载的数据,原因是根本没有重新加载,而只是将dialog里面的组件进行展示和隐藏而已
给点击时间里面加上强制刷新组件的代码,如下
//methods中方法 handleCreate(row) { this.isShow = false//销毁组件 this.$nextTick(() => { this.isShow = true//重建组件 }) //控制dialog的显示 this.dialogStatus = 'create' this.dialogFormVisible = true //传参 this.userid = row.approvalId.toString() }
关于“vue强制组件刷新问题如何解决”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识,可以关注亿速云行业资讯频道,小编每天都会为大家更新不同的知识点。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。