Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/401.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 澄清:Vue.js操作/突变_Javascript_Vue.js - Fatal编程技术网

Javascript 澄清:Vue.js操作/突变

Javascript 澄清:Vue.js操作/突变,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()调用中参数的顺序。有效负载是一个以use

我需要澄清一下:这些功能之间的相互作用。我正在学习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
定义中需要什么类型的数据,从而使预期负载中的名称-值对顺序无关紧要。那么为什么这个应用程序还能工作呢?变异是否希望接收名为
user
userId
的变量,这就是为什么顺序无关紧要的原因?

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

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

天哪!我忘记了解构,只是把它看作一个对象。非常感谢您的澄清。