Home > Article > Web Front-end > Introduction to project structure and configuration of vuex
This time I will bring you an introduction to the project structure and configuration of vuex. What are the precautions when using the vuex project structure and configuration? The following is a practical case, let's take a look.
First of all, here is a serious piece of "advice" from the official website:
Rules that vuex needs to abide by:
1. Application-level status should be concentrated into a single store object.
2. Submitting a mutation is the only way to change the state, and this process is synchronous.
3. All asynchronous logic should be encapsulated in action.
Relationship between files:
store folder - stores vuex series files
store.js - introduce vuex, set state data, introduce getter, mutation and action
getter.js - Get the status in the store
mutation.js - where functions used to change the state in the store are stored
action.js - Submit mutation to modify the state tactfully, and can operate asynchronously
Simple and common way of writing
store.js file:
import Vue from 'vue' import Vuex from 'vuex' import actions from './actions' import mutations from './mutations' Vue.use(Vuex) const state = { a: '初始值', b: 'balabala...' } export default new Vuex.Store({ state, actions, mutations })
In the main.js file (inject the store from the root component, just like injecting the router):
By registering the store option in the root instance, the store instance will be injected into all child components under the root component, and the child components can be accessed through this.$store.
import store from './store/index' new Vue({ el: '#app', router, store, ... })
Simple configuration of Getter.js (store's calculated property, accepts state as parameter)
export default { doneTodos: state = >{ return state.todos.filter(todo = >todo.done) } }
Get (inside the calculated property of a component):
computed: { doneTodosCount () { return this.$store.getters.doneTodosCount } }
Simple configuration of getter properties that can pass parameters
export default{ getTodoById: (state) => (id) => { return state.todos.find(todo => todo.id === id) } }
Get (inside the calculated property of a certain component):
computed: { getTodoById() { return this.$store.getters.getTodoById(‘参数') } }
mutation.js simple configuration:
export default { increment(state) { //变更状态 state.count++ } }
Trigger (in component)
this.$store.commit(state,payload) actions.js简单配置: export default{ action (context) { //异步操作 setTimeout(()=>{ //变更状态 context.commit('mutationFunName',value) }) } }
Trigger (component)
this.$store.dispatch('mutationFunctionName') 2018-04-07 18:13:34
I believe you have mastered the method after reading the case in this article. For more exciting information, please pay attention to other related articles on the PHP Chinese website!
Recommended reading:
What are the new features of vue-cli 3.0.x after upgrading to webpack4
How to implement JS Deduplication algorithm within JSON array
The above is the detailed content of Introduction to project structure and configuration of vuex. For more information, please follow other related articles on the PHP Chinese website!