javascript - 关于 : Vue. js 操作/突变的澄清

标签 javascript vue.js

我需要一些澄清:这些函数之间的相互作用。我正在学习 Vue.js 教程,并且我们有一个提交突变的操作。

行动:

updateUser({commit}, user) {
  commit('setUser', {userId: user['.key'], user})
}

突变:

setUser(state, {user, userId}) {
  Vue.set(state.users, userId, user)
}

我的问题是关于操作中 commit() 调用中参数的顺序。有效负载是一个对象,其第一个名称-值对是 userId,第二个值是用户对象本身。现在,在突变定义中,突变期望的有效负载中的值被颠倒了。我无法想象 JavaScript/Vue 如何知道 setUser 定义中期望的数据类型,以便预期有效负载中名称-值对的顺序无关紧要。那么为什么该应用程序仍然有效?突变是否期望接收名为 useruserId 的变量,这就是顺序无关紧要的原因?

最佳答案

它与 Vue 无关,而是一个 Javascript destructuring句法;顺序并不重要,因为它是通过键从对象中提取值;在您的情况下, setUser 需要一个包含键 user 和键 userId 的对象,该对象由 updateUser< 传递下来 行动;另请注意,这只是一个语法糖,您不必遵循,也就是说,您可以编写接受普通对象作为参数的突变,如下所示:

setUser(state, obj) {
  Vue.set(state.users, obj.userId, obj.user)
}

关于javascript - 关于 : Vue. js 操作/突变的澄清,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52858509/

相关文章:

javascript - 等待异步调用不适用于ajax

javascript - Javascript 可以访问外部或本地主机数据库或 Nodejs 吗?

javascript - React hooks 状态变量在重新渲染后未更新

javascript - 如何阻止 jQuery 加载已存在的 div

vue.js - vue-router 如何保留导航栏?

javascript - getElementById - Javascript

vue.js - 如何将 BootstrapVue 中的 Prop 传递给路由器链接

javascript - VueJS 2 Cli 使用 Dev Server 将 POST 请求转换为 GET 请求

javascript - vuex : $store. commit vs 直接调用函数

javascript - 在 Vue.Filter 中使用 Vue.Mixin 不起作用