【发布时间】:2021-03-10 07:17:05
【问题描述】:
与直接突变相比,使用突变处理程序需要编写数百倍的代码(在大型应用程序中,如果您遵循官方指南),因为它们需要计算属性并为每个嵌套状态属性存储突变。
我知道,理论上不使用突变处理程序会使追踪某些错误的来源变得更加困难,但在实践中,如果只有少数函数可以更改特定状态属性,则很容易确定哪个其中一个通过遵循事件逻辑导致错误,因为在大多数情况下,突变是由某种已知事件(按钮按下、输入更改等)引起的,因此当在特定事件期间出现错误时,跟踪并不难关闭导致它的函数,而不使用突变处理程序。
问题是,如果所有组件直接对存储数据进行变异而不使用变异处理程序(调试除外),你实际上会失去什么?
像这样,例如:
App.vue
<v-btn @click="createNewItem({ type: 'file', extension: 'txt' })">
Create new item
</v-btn>
methods: {
createNewItem (params) {
// Set dialog data
this.$store.state.dialogs.createNewItemDialog.data = {
...this.$store.state.dialogs.createNewItemDialog.data,
...params
}
// Open dialog
this.$store.state.dialogs.createNewItemDialog.isOpened = true
}
}
Dialogs.vue
<v-dialog v-model="$store.state.dialogs.createNewItemDialog.isOpened">
<div class="title">
Create new {{$store.state.dialogs.createNewItemDialog.data.type}}
</div>
<v-text-field
v-model="createNewItemDialog.data.name"
/>
<v-btn @click="$store.state.dialogs.createNewItemDialog.isOpened = false">
close dialog
</v-btn>
</v-dialog>
// NO COMPUTED PROPERTIES NEEDED
store.js
state = {
dialogs: {
createNewItemDialog: {
value: false,
data: {
type: 'file',
name: '',
extension: ''
}
}
}
}
// NO MUTATIONS AND ACTIONS NEEDED
【问题讨论】: