Vuex - 将多个参数传递给突变

新手上路,请多包涵

我正在尝试使用 vuejs 和 laravel 的护照对用户进行身份验证。

我无法弄清楚如何通过操作将多个参数发送到 vuex 突变。

- 店铺 -

 export default new Vuex.Store({
  state: {
    isAuth: !!localStorage.getItem('token')
  },
  getters: {
    isLoggedIn(state) {
      return state.isAuth
    }
  },
  mutations: {
    authenticate(token, expiration) {
      localStorage.setItem('token', token)
      localStorage.setItem('expiration', expiration)
    }
  },
  actions: {
    authenticate: ({
      commit
    }, token, expiration) => commit('authenticate', token, expiration)
  }
})

- 登录方式 -

 login() {
  var data = {
    client_id: 2,
    client_secret: '**************************',
    grant_type: 'password',
    username: this.email,
    password: this.password
  }
  // send data
  this.$http.post('oauth/token', data)
    .then(response => {
      // send the parameters to the action
      this.$store.dispatch({
        type: 'authenticate',
        token: response.body.access_token,
        expiration: response.body.expires_in + Date.now()
      })
    })
}

我会非常感谢任何形式的帮助!

原文由 Schwesi 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 361
2 个回答

突变需要两个参数: statepayload ,其中存储的当前状态由 Vuex 本身作为第一个参数传递,第二个参数包含您需要传递的任何参数。

传递多个参数 的最简单方法是 破坏它们

 mutations: {
    authenticate(state, { token, expiration }) {
        localStorage.setItem('token', token);
        localStorage.setItem('expiration', expiration);
    }
}

然后稍后在您的操作中,您可以简单地

store.commit('authenticate', {
    token,
    expiration,
});

原文由 Etheryte 发布,翻译遵循 CC BY-SA 4.0 许可协议

简单来说,您需要将有效负载构建到密钥数组中

payload = {'key1': 'value1', 'key2': 'value2'}

然后将payload直接发送到action

 this.$store.dispatch('yourAction', payload)

你的动作没有变化

yourAction: ({commit}, payload) => {
  commit('YOUR_MUTATION',  payload )
},

在您的突变中,使用键调用值

'YOUR_MUTATION' (state,  payload ){
  state.state1 = payload.key1
  state.state2 =  payload.key2
},

原文由 peterretief 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题