Я пытаюсь добавить дроби в vue / vyex, все добавления произошли в геттере, поэтому после изменения некоторых полей мы запускаем вычисленное значение.
И когда я нажимаю кнопку «добавить новые дроби», ясоздать новый объект с вычисляемым свойством и получить ошибку в геттере, потому что, как я понимаю, вычисленные изменения чека и начало работы геттера работают, но нового свойства нет, и я принимаю эту ошибку: Error in v-on handler: "TypeError: Cannot read property 'denominator' of undefined"
store
export default new Vuex.Store({
state: {
fractions: [
{
id: 1,
numerator: 0,
denominator: 0,
},
{
id: 2,
numerator: 0,
denominator: 0,
},
],
},
actions,
mutations: {
changeInput(state, payload) {
state.fractions.forEach((el) => {
if (el.id === payload.id) {
el[payload.key] = payload[payload.key];
}
});
},
addFraction(state) {
state.fractions.push({
id: state.fractions.length + 1,
numerator: 0,
denominator: 0,
});
},
deleteFraction(state, id) {
state.fractions.forEach((el, i) => {
if (el.id === id) {
state.fractions.splice(i, 1);
}
});
},
},
getters: {
takeSum(state) {
const sum = {
denominator: 0,
numerator: 0,
};
state.fractions.reduce((prev, curr) => {
sum.denominator = prev.denominator + curr.denominator;
sum.numerator = prev.numerator + curr.numerator;
});
return sum;
},
},
});
вычисляемое компонентное свойство
computed: {
...mapState([
'fractions',
]),
...mapGetters([
'takeSum',
]),
},
и шаблон
<Fraction
v-for="(fraction, index) in fractions"
:key="index"
:numerator=fraction.numerator
:denominator=fraction.denominator
:id="fraction.id"
@changeFractionInput=changeFractionInput
v-bind:onClick="deleteFraction"
/>
<div>sum: {{takeSum}}</div>