javascript - 仅使用突变的有效负载参数来修改 Vuex 状态是否可以?
问题描述
例如,我是否可以遍历 Vue 文件中的 Vuex 数据并选择需要更新的数据,然后将找到的数据传递给一个动作,该动作提交它,然后突变只进行更新?
我不确定的原因是因为 Vuex 突变的典型格式包含“状态”的参数,所以我认为需要使用它,唯一的方法是在内部进行所有循环突变,或将索引传递给它以更快地找到需要更改的确切字段。
对于谁问,一个代码示例:
一些VueFile.vue
computed: {
...mapState({
arrayOfObjects: (state) => state.someVuexStore.arrayOfObjects
}),
},
methods: {
myUpdateMethod() {
let toBePassedForUpdate = null;
let newFieldState = "oneValue";
this.arrayOfObjects.forEach((myObject) => {
if (myObject.someDataField !== "oneValue") {
toBePassedForUpdate = myObject.someDataField;
}
})
if (toBePassedForUpdate) {
let passObject = {
updateThis: toBePassedForUpdate,
newFieldState: newFieldState
}
this.$store.dispatch("updateMyObjectField", passObject)
}
}
}
一些VuexStore.js
const state = {
arrayOfObjects: [],
/* contains some object such as:
myCoolObject: {
someDataField: "otherValue"
}
*/
}
const mutations = {
updateMyObjectField(state, data) {
data.updateThis = data.newFieldState;
}
}
const actions = {
updateMyObjectField(state, data) {
state.commit("updateMyObjectField", data);
}
}
解决方案
是的,通过 payload 参数而不是state
. Vuex 不会费心去区分这两者。在任何一种情况下,它都是相同的状态,并且这两个选项都没有减损使用突变的目的。
为了更加确定这一点,您可以询问突变和强制使用它们的目的是什么。答案是为具体定义的状态更改保留一个集中的、可跟踪的位置。
为了说明这是一件好事,想象一个有 1000 个组件的应用程序,每个组件都在本地、在突变之外以不同的方式改变状态。作为第 3 方调试或理解这可能是一场噩梦,因为您不知道状态如何或在何处发生变化。
因此,突变强制执行方式和集中位置。仅在突变中使用有效载荷参数都不会损坏这些。
推荐阅读
- php - 电话号码正则表达式应以 0 开头
- javascript - 当只有一个参数但有两个变量时,闭包如何工作?
- gitlab - .gitlab-ci.yml 我们可以捕获 curl 的响应然后有选择地运行后续阶段吗?
- javascript - Typescript React 中的动态过滤
- python - 如何在循环的每次迭代中使用 for-loop 为 SVR 生成 X_train?
- python-3.x - 将矩形图像投影到弯曲的背景上
- asp.net-core - 如何使用带有自定义参数的 ASP.NET Core 实现 dhtmlxScheduler?
- rest - VMware Rest API 身份验证失败
- python - 使用嵌套的while循环替换列表列表的元素
- oauth-2.0 - Oauth2 PKCE 谁应该生成代码验证器和代码质询