javascript - Vue.js - 子组件在更新其位置时重新渲染
问题描述
我是新手Vue.js
,我正在使用它Vue-Draggable
来重新安排 DOM 内独立小部件(组件)的位置。
我还希望能够通过包含订单的 Ajax 响应动态地重新排列这个位置。
我当前实现的问题是,当我重新安排时,组件会重新渲染。我不想要那个。
任何想法都会有所帮助。
<template>
<draggable tag="div"
class="container-fluid"
@start="drag=true"
@end="drag=false"
handle=".v-drag-handle"
v-bind="dragOptions"
v-model="widgetList"
>
<transition-group type="transition">
<component v-for="(widget, key) in widgetList"
:key="key"
:is="widget.widget">
</component>
</transition-group>
</draggable>
</template>
const widgets = [
Component1,
Component2,
Component3,
Component4,
Component5
];
export default {
name: 'Stack overflow',
data() {
return {
widgetList: [],
drag: false,
config: this.getHttpConfig(),
};
},
computed: {
dragOptions() {
return {
animation: 800,
disabled: false,
ghostClass: "v-ghost"
};
}
},
created() {
this.getWidgetOrder();
},
watch: {
widgetList(val, oldVal) {
if (oldVal) {
this.setWidgetOrder(this.widgetList);
}
}
},
methods: {
sort() {
this.widgetList = widgets.map((widget, index) => {
return { widget: widgets[index], order: index + 1 };
});
},
getWidgetOrder() {
this.prepareFormData('get');
this.$http(this.config)
.then(response => {
//todo handle response
this.sort();
})
.catch(response => {
throw new Error('Could not get widget order.');
});
}
},
components: {
Component1,
Component2,
Component3,
Component4,
Component5
}
}
为了节省时间,我删除了所有不相关的方法,只保留了问题发生时使用的方法。我相信问题正在发生v-model
,当 widgetList 更新时,我遇到了这个问题。
解决方案
出现这里的问题是因为key
循环中的 in 发生了变化,Vue 会自动重新创建组件。
解决方案是使用组件的名称作为键。:key="widget.name"
推荐阅读
- jmeter - 如何在詹金斯管道的不同阶段分配具有特定标签的相同节点
- r - 仅在 R 的列中保留某些值
- mysql - 我无法通过 apache tomcat 服务器使用 JSP 作为我的平台从 MySQL Workbench 8.0 检索数据。这是为什么?
- visualization - 如何在 Grafana 的 Statusmap 图表中调整条形的长度?
- command-line - 如何使用 GNU mtools 从给定的磁盘映像中提取所有文件?
- python - 如何使用 KMeans 绘制质心
- javascript - 单元测试 axios.mockImplementation 调用不断给我不变的状态?
- reactjs - 扩展组件时如何初始化状态?
- xml - 使用 Shell 脚本查找 XML 文件的嵌套标记值
- authentication - 如何使用 firebase admin sdk 进行身份验证?