处理Vue3js中的意外突变属性



我有一个vue3网络应用程序,用来编辑一些多页文档
所有页面都存储在带小齿轮的状态下。我的pinia状态是一个具有pages属性的对象,该属性是一个包含每页所有数据的数组。

每个文档的每个页面都使用一个特定的模板,所以我创建了多个组件来处理每个模板,而且我还为一些部分创建了子组件,这些组件可以在多个模板中找到
我使用根组件循环浏览页面,传递对页面对象的引用,如下所示:
<PageWrapper v-for="page in pages" :key="page.id" :page="page" />

然后,在PageWrapper组件中,我使用相应页面模板的组件,传递对页面对象的引用(如果有子组件,也一样(:

<PageFirst v-if="props.page.type === 'first'" :page="props.page" />
<PageServices v-if="props.page.type === 'services'" :page="props.page" />
<PageTotal v-if="props.page.type === 'total'" :page="props.page" />
<PageContent v-if="props.page.type === 'content'" :page="props.page" />

我想知道从子组件编辑page对象的属性的最佳方式是什么,因为我知道直接更改属性是一种糟糕的做法
我必须使用事件吗?PageWrapper是捕捉所有事件和修改的好地方吗?

关于这件事的任何建议都会对我有很大帮助。
非常感谢你的帮助!

正如Vue官方文件所指出的:

在大多数情况下,子级应该发出一个事件,让父级执行突变。

所以答案是你应该让父母来完成改变道具的工作。而且它永远不会是一个糟糕的解决方案

但是,看看你的设计。您的父组件PageWrapper就像一个包装器一样工作。它只为它的孩子做一个容器。

props单向数据流可防止子组件意外更改父组件的状态,这会使应用程序的数据流更难理解。但是,如果父组件实际上不处理状态,并且子组件的数据彼此不相关,则更改子组件内部的道具将是非常好的。

最新更新