#vue.js #nuxt.js #vuex #getter-setter
Вопрос:
ЦЕЛЬ: Я хотел бы просмотреть объект состояния vuex (MATCH_DATA) на предмет изменений, специфичных для значения реквизита (TopicID). Итак, я хотел бы настроить наблюдателя на просмотр MATCH_DATA[TopicID]. И всякий раз, когда MATCH_DATA[TopicID] обновляется, я хотел бы вызывать функцию (в этом раннем случае просто регистрирую ее).
Однако, поскольку MATCH_DATA является получателем, как бы я передал ему параметр? Геттер vuex, похоже, не предназначен для учета параметров. Я видел некоторые примеры, явно вызвав этот файл.$store.state.etc.etc., Но есть ли способ сделать это, сохранив три точечные обозначения, которые у меня в настоящее время есть?
Или есть ли какой-то лучший способ достижения этой цели, который не предполагает получения vuex?
Текущий Код:
Компонент Nuxt:
<script>
import { mapGetters, mapActions } from 'vuex';
export default {
props: ['topicId'],
computed: {
...mapGetters('sessionStorage', ['MATCH_DATA']),
},
watch: {
MATCH_DATA (newMatchData, oldMatchData) {
console.log(newMatchData);
}
},
mounted() {
this.SUBSCRIBE_TO_TOPIC(this.topicId);
},
methods: {
...mapActions('sessionStorage', ['SUBSCRIBE_TO_TOPIC'])
}
}
магазин vuex:
/* State */
export const state = () => ({
MATCHES: {},
});
/* GETTERS */
export const getters = {
MATCH_DATA: (state) => {
return state.MATCHES;
},
};
Комментарии:
1. Не знаю, почему вы удалили свой предыдущий вопрос..
2. @kissu эта проблема была просто запутана этой. Проблема заключалась в том, что объект создается в рамках СОВПАДЕНИЙ до подписки. Так что просмотр МАТЧЕЙ не вызовет никаких обновлений. Это должен быть конкретный объект соответствия внутри СОВПАДЕНИЙ. Спасибо, что помогли мне.
Ответ №1:
Ваш получатель может просто вернуть функцию, подобную этой:
export const getters = {
MATCH_DATA: (state) => {
return topicId => {
// return something
}}
},
};
Затем вы можете создать вычисляемое свойство для доступа к этим получателям:
export default {
computed: {
...mapGetters('sessionStorage', ['MATCH_DATA']),
yourComputedProperty () {
return this.MATCH_DATA(this.topicId)
}
}
}
Затем вы можете наблюдать за вычисляемым свойством, чтобы реагировать на изменения.
watch: {
yourComputedProperty (newData, oldData) {
console.log(newData);
}
}
Комментарии:
1. Спасибо. Но как бы я назвал это из наблюдаемого компонента?
2. Я обновил описание. Работает ли это для вас?
3. Близко, но я хотел сохранить три точечные обозначения в качестве состояний op. Возможно ли это? Я могу использовать этот метод в противном случае.
4. Я не использую обозначение с тремя точками, но оно тоже должно работать. Я снова обновил ответ (по крайней мере, с помощью другого вычисляемого свойства или метода).