@Fierfoxik

Почему данные из action не отправляются в mutation?

Пересел с react/redux на vue/vuex и возникли проблемы с vuex.

Почему то при dispatch или cmmit из action туда не приходит не один из методов а приходят только передаваемые данные.

Также при dispatch экшена из компонента мы принимаем данные, но данные судя по всему никуда из action не уходят, т.к принимаемые данные в mutation пусты.

store

import Vue from 'vue'
import Vuex from 'vuex'
import * as actions from './actions'
import * as getters from './getters'
import * as mutations from './mutations'

Vue.use(Vuex)

const initialState = {
  settings: JSON.parse(localStorage.getItem('widgetSettings')) || []
};

const inBrowser = typeof window !== 'undefined'

// if in browser, use pre-fetched state injected by SSR
const state = (inBrowser && window.__INITIAL_STATE__) || initialState


export const store = new Vuex.Store({
  state,
  actions,
  mutations,
  getters
})

actions

import {SAVE_WIDGET_SETTINGS} from '../constants'

export const saveSettings = ( data) => {
        console.log(data)
        return {SAVE_WIDGET_SETTINGS, data}
};

mutations

import {SAVE_WIDGET_SETTINGS} from '../constants/index'


export const mutations = {
    SAVE_WIDGET_SETTINGS (state, data) {  state.settings.push(data)}

}

component

<div class="widgetsblock_selectors_grid_col">
	<div class="widgetsblock_selectors_selector">
		<button class="btn btn-secondary btn-sm" v-on:click="submit" type="button">Сохранить</button>
	</div>
</div>
<script>
    import { mapActions } from 'vuex'
    import { mapState } from 'vuex'
    import { saveSettings } from '../../vuex/actions'


    export default {
        name: 'WidgetsOptions',
        data () {
            return {
                checkedNames: []
            }
        },
        mounted: function () {
            this.loadSettings()
        },
        methods: {
            submit: function() {
                localStorage.setItem('widgetSettings', JSON.stringify(this.checkedNames));

                mapActions([(saveSettings(this.checkedNames))]);
            }
        }
    }
</script>
  • Вопрос задан
  • 427 просмотров
Пригласить эксперта
Ответы на вопрос 1
lavezzi1
@lavezzi1
Action такой должен быть:

saveSettings({ commit }, data) => {
        console.log(data)
        commit(SAVE_WIDGET_SETTINGS, data)
};
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы