Чтобы изменить логическое значение в списке задач магазина, обе эти две мутации работают.
export default new Vuex.Store({
state: {
todos: [
{
id: "x1",
done: false
},
{
id: "x2",
done: true
}
]
},
mutations: {
/**
* the item in payload must is the part of the store.state that we want to mutate
* we will mutate the payload (not the store state) => we don't use the state parameter
* in order to use this mutation we must to assure that item is an object of the store state.
*/
setDoneWithObject(state, { item, done }) {
//mutate the payload = mutate the store.state
if (item) item.done = done;
},
/**
* give the id
*/
setDoneWithId(state, { id, done }) {
//find the item in the store state
let item = state.todos.find(o => o.id===id)
//mutate it
if (item) item.done = done;
}
}
});
первый метод быстрее, но его нужно использовать осторожно, мы не можем не бросать в полезный груз только один объект.
второй мутат кажется более "не имеющим состояния", поэтому мы можем легко выполнить его модульное тестирование в любом контексте ... он работает все время.
Такесть (и какой из них) правильный / или лучший образец?(мое приложение интенсивно использует первый шаблон).Есть ли у вас другие плюсы / минусы этих 2 моделей?