Home > Web Front-end > JS Tutorial > body text

Introduction to project structure and configuration of vuex

php中世界最好的语言
Release: 2018-04-12 10:09:41
Original
2180 people have browsed it

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.

FileDirectory structure

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
})
Copy after login

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,
 ...
})
Copy after login

Simple configuration of Getter.js (store's calculated property, accepts state as parameter)

export default {
  doneTodos: state = >{
   return state.todos.filter(todo = >todo.done)
  }
}
Copy after login

Get (inside the calculated property of a component):

computed: {
 doneTodosCount () { 
  return this.$store.getters.doneTodosCount 
 }
}
Copy after login

Simple configuration of getter properties that can pass parameters

export default{
 getTodoById: (state) => (id) => { 
  return state.todos.find(todo => todo.id === id) 
 }
}
Copy after login

Get (inside the calculated property of a certain component):

computed: {
 getTodoById() { 
  return this.$store.getters.getTodoById(‘参数')
 }
}
Copy after login

mutation.js simple configuration:

export default {
  increment(state) {
   //变更状态
   state.count++
  }
}
Copy after login

Trigger (in component)

this.$store.commit(state,payload)
actions.js简单配置:
export default{
 action (context) {
 //异步操作
  setTimeout(()=>{
   //变更状态
   context.commit('mutationFunName',value)
  })
 }
}
Copy after login

Trigger (component)

this.$store.dispatch('mutationFunctionName')
2018-04-07 18:13:34
Copy after login

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!

Related labels:
source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
About us Disclaimer Sitemap
php.cn:Public welfare online PHP training,Help PHP learners grow quickly!