У меня есть магазин Vuex с двумя состояниями.
Я использую эти состояния, чтобы показать заметки в списке с геттером. Этот геттер объединяет два объекта и возвращает объекты слияния.
Проблема, с которой я столкнулся сейчас, заключается в том, что если я добавлю новую заметку в одно из состояний, она не будет отображаться в списке заметок, потому что получатель не выбирает «изменение». Я думаю, это происходит потому, что я возвращаю переменную вместо функции.
Это мой геттер:
const getters = {
notesObject: (state, getters, rootState, rootGetters) => {
let result = {};
let mergedObject = {...state.notes, ...state.localNotes};
Object.keys(mergedObject).forEach(key => {
const item = mergedObject[key];
if (rootGetters['tags/activeKey'] === null) {
result[key] = item
} else if (item.tag_id === rootGetters['tags/activeKey']) {
result[key] = item
}
});
return result;
},
};
Пример объекта:
example: {
5: {
title: 'Testing title',
text: 'text'
},
6: {
title: 'Testing title',
text: 'text'
}
}
Я надеюсь, что кто-то может помочь мне найти лучшее решение для этого. Я думал об использовании наблюдателя, но я знаю, что этого нужно избегать.
Решение состояло в том, чтобы позволить наблюдателю объединить два состояния в новое состояние. Тогда геттеру не нужно объединять два объекта
Как выглядит ваша мутация?
это мутация: state.localNotes[payload.id] = payload;



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Система Vue реактивность не обнаруживает добавление новых свойств. Попробуйте использовать Vue.set(object, key, value) при добавлении новых заметок.
В вашей функции мутации замените state.localObject[payload.id] = payload; на Vue.set(state.localObject, payload.id, payload); Тогда геттер должен работать правильно.
Должен ли я всегда использовать Vue.set и Vue.delete для добавления и удаления объекта?
В общем, это хороший совет, которому стоит следовать, когда вы сталкиваетесь с этими ограничениями.
Можете ли вы показать, как вы добавляете новые заметки? Я не вижу никаких проблем с кодом, которым вы поделились.