Как вызвать мутацию из экшена

163
20 марта 2019, 01:50

Использую Vue.js, имеется вот такой actions:

 actions: {
     chmy(store, i){
      store.state.controls[i].isActive = true;
      store.state.controls[i].isValid = store.state.myinputs[i].regexp.test(store.state.myinputs[i].value);
   }

При запуске кода Vue.js ругается, что

Error: [vuex] Do not mutate vuex store state outside mutation handlers.

Как лучше всего написать мутацию? Ведь мне ещё нужно передать индекс массива controls i.

Попробовал так:

  actions: {
    chmy(store, i){
      store.commit('updControls', {control: store.state.controls[i].isActive, val: true});
}
}
  mutations: {
    updControls(state, obj){
      obj.control = obj.val;
    }
}

но не работает. подскажите как правильно

Answer 1
mutations: {
    chmy(state, i){
        state.controls[i].isActive = true;
        state.controls[i].isValid = state.myinputs[i].regexp.test(state.myinputs[i].value);
    }
}

И вместо action сразу вызывать мутацию

Если нужно именно через action

actions: {
    chmy(store, i){
        store.commit("updControls", {
            index: i, 
            value: {
                isActive: true, 
                isValid: store.state.myinputs[i].regexp.test(store.state.myinputs[i].value)}})
            }
        }
    }
},
mutations: {
    updControls(state, {index, value}) {
        state.controls[index] = value
    }
}
Answer 2
    actions: {
        chmy({commit}, someObject){
          commit('updControls', someObject);
}
    }
  mutations: {
    updControls(state, someObject){
      state.someStateObject = someObject;
    }
}
READ ALSO
Должен ли я минифицировать мой css и javascript код в Laravel?

Должен ли я минифицировать мой css и javascript код в Laravel?

Javascript код веб сайта находятся в директории pulbic, должен ли я минифицировать свой код для готовой версии сайта ?

155
Замылить фоновую картинку средствами CSS

Замылить фоновую картинку средствами CSS

На Behance нашел интересный эффект

143
Вёрстка 14 колонок в макете разрешение 1360px

Вёрстка 14 колонок в макете разрешение 1360px

Есть макет размер контента 1360pxИ 14 колонок

166
Отключить перенос блока на новую строку

Отключить перенос блока на новую строку

потихоньку пытаюсь начать разбираться в html, не понимаю как сделать так, чтобы пятый и последующие блоки (один, два) оставались в своей строке,...

163