совместное использование данных vuex

  1. Базовая конфигурация vuex:

1.1 Установите пакет зависимостей vuex:

npm install vuex --save

1.2 Создайте файл store.js в каталоге src

import Vue from 'vue'
import Vuex from 'vuex'

Vue.use(Vuex)

export default new Vuex.Store({
    
    
  state: {
    
    
    
  },
  mutations: {
    
    },
  actions: {
    
    },
})

1.3. Смонтируйте объект хранилища в экземпляр vue

import store from './store'

new Vue({
    
    
  // 将创建的共享数据对象,挂载到Vue实例中
  // 所有的组件就可以直接从store中获取全局数据
  store,
  render: (h) => h(App),
}).$mount('#app')

2. Основная концепция Vuex — состояние:

state提供唯一的公共数据源,所有的共享的数据都要统一放到Store中的state中进行储存

Если данные счетчика хранятся в состоянии

state:{
    
     Count:0 }

2.1 Первый способ доступа к данным в состоянии:

// this.$store.state.全局数据名称
this.$store.state.Count

2.2 Второй способ доступа к данным в состоянии:

  // 从vuex中按需导入mapState 函数
import {
    
     mapState } from 'vuex'

Через импортированную функцию mapState глобальные данные, требуемые текущим компонентом, сопоставляются с вычисляемым свойством текущего компонента, и их
можно использовать непосредственно как вычисляемое свойство при его использовании.

computed: {
    
    
    ...mapState(['Count']),
  },

3. Основная концепция vuex — мутация
В vuex нельзя напрямую манипулировать данными в хранилище, но данные в хранилище можно изменить только посредством мутации.Хотя
этот метод немного громоздок в работе, он может централизованно контролировать все изменения данных и облегчение обслуживания
3.1 Первое использование мутации:

mutations: {
    
    
	// step是参数
    add(state,step) {
    
    
      state.Count++
    },
methods: {
    
    
    btnhandler1() {
    
    
    // 用this.$store.commit('mutation中的函数名',参数)
    //commit的作用是调用某个mutation函数
      this.$store.commit('add',3)
    },
  },

3.2 Второе использование мутации:

// 从vuex按需导入mapMutations函数
import {
    
     mapMutations } from 'vuex'

Через импортированную функцию mapMutations функции в необходимых мутациях сопоставляются с методами текущего компонента

methods: {
    
    
    ...mapMutations(['add']),
    
  },

4. Основная концепция vuex ---- Действие:
если вы изменяете данные с помощью асинхронных операций, вы должны использовать действие вместо мутации, но в действии вам все равно нужно косвенно изменять данные, вызывая мутацию.
4.1 Первое использование действия:

addAsync(context, step) {
    
    
      setTimeout(() => {
    
    
        // 在actions中不能直接修改state中的数据
        // 必须通过context.commit()触发某个mutation才行
        context.commit('add', step)
      }, 1000)
    },
btnhandler4() {
    
    
		// dispatch函数,专门用来触发action
      this.$store.dispatch('addAsync', 5)
    },

4.2 Второе использование Действия:

// 从vuex中按需导入mapActions函数
import {
    
    mapActions} from 'vuex'

Сопоставьте функции в действиях с методом методов текущего компонента через функцию mapActions

methods: {
    
    
    
    ...mapActions(['addAsync','addNAsync']),
    
  },

5. Основная концепция vuex - Getter
① .Getter используется для обработки данных в хранилище для формирования новых данных, аналогично свойствам расчета Vue
② Когда данные в хранилище изменяются, данные в Getter также изменяются
5.1 Getter Первое использование:

getters: {
    
    
    showNum(state) {
    
    
      return '当前最新的Count值为' + state.Count
    }
  }
//使用 this.$store.getters.名称
this.$store.getters.showNum

5.2 Второе использование:

import {
    
    mapGetters} from 'vuex'
computed:{
    
    
...mapGetters(['showNum'])
}

おすすめ

転載: blog.csdn.net/weixin_44738158/article/details/121113816