【发布时间】:2020-07-10 09:30:44
【问题描述】:
我们使用 TypeScript 和 vue-property-decorator 使用 VueJS 构建了一个所见即所得的编辑器。我无法真正详细说明,提取一段代码以显示该问题几乎是不可能的。因此,我希望我能充分解释这个问题,也许有人可以给出一些指示,我们可能有错误。
根组件是布局编辑器,它有一个布局面板和一个属性面板,类似于胖客户端。您可以使用drag&drop component 在此布局面板中排列元素。 组件层次结构是这样的: LayoutEditor -> BaseElement(包含拖放组件)-> Actual Element(位于拖放组件的槽中)。 一些简化的代码示例:
<layout-editor>
<base-element v-for="(element) in elements" :element="element" :key="element.id"></base-element>
</layout-editor>
基本元素:
<vue-draggable-resizable>
<component
:is="element.componentType"
:data="element.componentData"
</vue-draggable-resizable>
问题
一个新元素被添加到布局编辑器中,方法是将其推入elements 数组并保存属性。然后组件会根据其属性正确呈现,但对属性的任何进一步更改都不会反映在布局面板中。
数据存储在 mongodb 中,因此当整个页面被刷新并且布局编辑器及其所有子元素挂载时,可以根据需要更改属性并立即反映更改。只有新添加的行为不同,如果 elements 数组是通过 axios 加载的,或者如果我们将元素推入,一旦加载,我们看不到有什么不同。如果新元素无法正确渲染,会更容易理解,但是第一次保存到属性有效,只有后续的无效。
有什么想法是我们在添加新元素时可能犯的错误吗?
【问题讨论】:
-
你可以像
<someComponent :key="someKey"></someComponent>这样改变它的key来强制更新一个组件。每次您想重新更新组件时,您只需更改someKey的值。喜欢:++someKey如果它是一个数字。这可能是一个临时解决方案
标签: typescript vue.js