Ваша commit
функция имеет:
commit(keyMutation, payload) {
!payload ? this.mutations[keyMutation](this.state) : this.mutations[keyMutation] (this.state, payload);
},
То есть первое выражение выполняется, только если payload
равно truey . Но ваш
store.commit('reduceValueOfLife', 0);
вызывает со значением falsey payload
, поэтому выполняется следующее:
this.mutations[keyMutation](this.state)
с keyMutation
как 'reduceValueOfLife'
. Так что ваша reduceValueOfLife
функция
reduceValueOfLife(state, valueForReduce) {
state.life -= valueForReduce;
console.log('subtr ' + valueForReduce + ' --- ' + typeof valueForReduce);
}
вызывается с valueForReduce
как undefined
, и вычитание undefined
из того, что state.life
первоначально было результатом, приводит к NaN
.
Лучше проверить, является ли payload
1031 * неопределенным , а не просто falsey , и тогда ваш store.get
возвращает числовое значение, а не NaN
:
commit(keyMutation, payload) {
if (payload === undefined) this.mutations[keyMutation](this.state)
else this.mutations[keyMutation](this.state, payload);
},
Другой вариант для вашего commit
, вместо проверки определения аргументов, - просто * вызвать функцию [keyMutation]
с this.state
и payload
. Если commit
s payload
равно undefined
, то второй передаваемый аргумент будет undefined
, что будет таким же поведением, как и при отсутствии второго параметра вообще.
commit(keyMutation, payload) {
this.mutations[keyMutation](this.state, payload);
},
Если вы хотите, чтобы окончательный currentLife
был равен 100, после того, как он был уменьшен до 90 во второй части, вам придется позвонить
store.commit('reduceValueOfLife', -10);
в последней части, чтобы увеличить его до 100:
const createStore = () => ({
state: {
life: 100
},
mutations: {
reduceOneOfLife(state) {
state.life -= 1;
},
reduceValueOfLife(state, valueForReduce) {
state.life -= valueForReduce;
console.log('subtr ' + valueForReduce + ' --- ' + typeof valueForReduce);
}
},
getters: {
currentLife(state) {
return state.life;
}
},
commit(keyMutation, payload) {
if (payload === undefined) this.mutations[keyMutation](this.state)
else this.mutations[keyMutation](this.state, payload);
},
get(KeyGetters) {
return this.getters[KeyGetters](this.state);
}
});
const store = createStore();
store.mutations.reduceValueOfLife(store.state, 0);
let currentLife = store.get('currentLife');
console.log(currentLife); // -> 100
console.log(currentLife === 100); // -> true
store.commit('reduceValueOfLife', 10);
currentLife = store.get('currentLife');
console.log(currentLife); // -> 90
console.log(currentLife === 100); // -> false
store.commit('reduceValueOfLife', -10);
currentLife = store.get('currentLife');
console.log(currentLife);
console.log(currentLife === 100);