#vue.js #vuex
Вопрос:
Я пытаюсь использовать mapState
и сталкиваюсь с проблемами с реактивными данными. У меня есть следующее внутри моего Test.vue
компонента
<template>
<div> {{ name }} </div>
</template>
computed: {
...mapState('user', ['age','name]
}
когда мое состояние user.name
обновляется за пределами Test.vue
компонента, новое значение не отображается внутри Test.vue
.
так, например, если у меня есть обновление через мутацию в моем userStore
,
[SET_USER_NAME_MUTATION](state, value) {
state.name = value;
},
commit('SET_USER_NAME_MUTATION', "John")
теперь в моем магазине Vuex, когда я проверяю chrome DevTools, user { name: "John" }
, что правильно
Комментарии:
1. Покажите, как вы обновляетесь
user.name
. Какую версию Vue вы используете?2. только что обновлено… Я обновляю состояние с помощью мутаций в
user
магазине. Кроме того, используя Vue 23. Можете ли вы поделиться ссылкой на воспроизведение проблемы?
4. Я предполагаю, что пропущенное
'
в конце...mapState('user', ['age','name]
присутствует в вашем реальном коде?
Ответ №1:
Вы должны изменить состояние с помощью действий vuex вместо прямого вызова мутации. Попробуйте сделать что-то подобное, предположив, что ваше состояние содержит user
объект со name
свойством:
Компонент Vue
<template>
<div>
<span>{{ name }}</span>
<button @click="changeName">Change name</button>
</div>
</template>
<script>
import { mapState } from 'vuex'
export default {
name: 'MyComponent',
computed: {
...mapState({
name: state => state.user.name
})
},
methods: {
changeName () {
this.$store.dispatch('changeName', 'John Smith')
}
}
}
</script>
Магазин Vuex
// state
const state = {
user: {
name: null
}
}
// getters
const getters = {
// ...
}
// actions
const actions = {
changeName ({ commit }, payload) {
commit('setName', payload)
}
}
// mutations
const mutations = {
setName (state, payload) {
state.user.name = payload
}
}
export default {
namespaced: true,
state,
getters,
actions,
mutations
}
В любом случае, будет очень полезно знать структуру вашего государства, чтобы лучше подходить к вашему конкретному случаю