Правильно ли отправлять часть магазина Vuex в качестве полезной нагрузки действия? - PullRequest
0 голосов
/ 01 сентября 2018

У меня есть несколько вопросов об этом vuex store

export default {
    state: {
        resultSet: [
            {
                name: "result 1"
                deep: {
                    inside: {
                        isLoading: false
                    }
                }
            },
            {
                name: "result 2"
                deep: {
                    inside: {
                        isLoading: false
                    }
                }
            },
        ]
    },
    actions: {
        /*
        r is an item of the resultSet in the store (so r is a part of the store)
        */
        sendQuery(context, r) {
            //Here I mutate r directly (it means that I mutated the store directly without commit a mutation)

            r.deep.inside.isLoading = true;

            //Everything work, the UI is updated along with the state changes, but I'm not sure that 
            //I'm doing the right thing (mutate the store indirectly without committing a mutation)
        }
    }
}

Вопросы:

  1. Правильно ли отправлять часть магазина в качестве полезного груза действия? => действие может напрямую изменить состояние r.

  2. Правильно ли изменить r.deep.inside.isLoading=true в вышеуказанном действии?

1 Ответ

0 голосов
/ 01 сентября 2018
  1. Правильно ли отправлять часть магазина в качестве полезного груза действия? => действие может напрямую изменить состояние r.

Это нормально для государства быть в полезной нагрузке. Но действия не могут напрямую изменять состояние.

  1. Правильно ли изменить r.deep.inside.isLoading=true в вышеуказанном действии?

Нет. Из документов :

Вместо того, чтобы мутировать состояние, действия совершают мутации.

Действия должны только совершать мутации (вроде как "шина событий" и / или мьютекс в Vuex).

Может показаться глупым, что действия (которые похожи на сами события) отправляют другие события, подобные событиям, но у событий мутации («фиксаций») есть специальные правила, например, они должны быть синхронными , в то время как действия могут выполнять асинхронные задачи перед совершением мутаций.

Воспользуйтесь строгим режимом во время разработки. Таким образом, Vuex обязательно сообщит вам о неправильном изменении состояния.

...