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()
})
})
}
Я был бы очень благодарен за любую помощь!
Ответы
Ответ 1
Мутации ожидают два аргумента: state
и payload
, где текущее состояние хранилища передается самим Vuex как первый аргумент, а второй аргумент содержит все параметры, которые необходимо передать.
Самый простой способ передать несколько параметров - уничтожить их:
mutations: {
authenticate(state, { token, expiration }) {
localStorage.setItem('token', token)
localStorage.setItem('expiration', expiration)
}
}
Затем в ваших действиях вы можете просто
commit('authenticate', {
token,
expiration
})
Ответ 2
Проще говоря, вам нужно встроить полезную нагрузку в массив ключей
payload = {'key1': 'value1', 'key2': 'value2'}
Затем отправьте полезные данные прямо на действие
'this.$store.dispatch('yourAction', payload)'
никаких изменений в ваших действиях
yourAction: ({commit}, payload) => {
commit('YOUR_MUTATION', payload )
},
в вашей мутации вызовите значения клавишей
'YOUR_MUTATION' (state, payload ){
state.state1 = payload.key1
state.state2 = payload.key2
},