vue——强制刷新子组件重新渲染
vue——重新渲染子组件不妥的方式:v-if较好的方式:forceUpdate最好的方法:key不妥的方式:v-if在父组件中,给子组件添加v-if属性<Button v-if="refresh" :data='data' />监听data,当data发生变化时,重新渲染子组件export default {data(){data: [],refresh: true},watch:{d
·
vue——重新渲染子组件
不妥的方式:v-if
- 在父组件中,给子组件添加v-if属性
<Button v-if="refresh" :data='data' />
- 监听data,当data发生变化时,重新渲染子组件
export default {
data(){
data: [],
refresh: true
},
watch:{
data(){
this.refresh = false;
this.$nextTick(() => {
// 重新渲染组件
this.refresh = true;
});
}
}
}
提示:这个方法会强制删除旧组件并创建新组件。
较好的方式:forceUpdate
// 全局
import Vue from 'vue';
Vue.forceUpdate();
// 使用组件实例
export default {
methods: {
methodThatForcesUpdate() {
// ...
this.$forceUpdate();
// ...
}
}
}
提示:这不会更新任何计算属性,调用forceUpdate仅仅强制重新渲染视图。
最好的方法:key
如果key
保持不变,则不会更改组件,但当key
发生更改时,vue会删除旧组件并创建新组件,它将重新初始化自身并“重置”其状态
<template>
<component-to-re-render :key="componentKey" />
</template>
export default {
data() {
return {
componentKey: 0,
};
},
methods: {
forceRerender() {
this.componentKey += 1;
}
}
}
提示:如果确实需要重新渲染某些内容,请选择key更改方法而不是其他方法。
更多推荐
已为社区贡献4条内容
所有评论(0)