Vue全家桶-Vuex

目录

1. Vuex 概述

1.1 组件之间共享数据的方式

1.2 Vuex 是什么

 1.3 使用 Vuex 统一管理状态的好处

 1.4 什么样的数据适合存储到 Vuex 中

2. Vuex 的基本使用

1. 安装 vuex 依赖包

 2. 导入 vuex 包

 3. 创建 store 对象

 4. 将 store 对象挂载到 vue 实例中

3. Vuex 的核心概念

3.1 核心概念概述

3.2 State

3.3 Mutation

3.4 Action

3.5 Getter

4. Vuex 的小案例:计数器

 示例代码:(只提供重要组成部分)

main.js部分:

App.vue部分:

store.js部分(vuex部分):

Addition.vue部分:

Subtraction部分:


 

1. Vuex 概述

1.1 组件之间共享数据的方式

父向子传值v-bind 属性绑定

子向父传值:v-on  事件绑定

据: EventBus

$on  接收数据的那 组件
$emit 发送数据的那 组件

1.2 Vuex 是什么

Vuex 实现组件全局便的共享。Vue全家桶-Vuex_第1张图片

 1.3 使用 Vuex 统一管理状态的好处

①  能够在 vuex 中集中管理共享维护

②  能够高效地实的数

③  存储 vuex 中的数据都是响

 1.4 什么样的数据适合存储到 Vuex

一般情况下,间共 vuex 中;对于组件中储在组件自身的 data 中即可。

2. Vuex 的基本使用

1. 安装 vuex 依赖包

npm install vuex --save

 2. 导入 vuex 包

import Vuex from 'vuex'
Vue.use(Vuex)

 3. 创建 store 对象

const store = new Vuex.Store({

    // state 中存放的就是全局共享的数据

    state: { count: 0 }

})

 4. store 对象挂载到 vue 实例中

new Vue({

    el: '#app',

    render: h => h(app),

    router,

    // 将创建的共享数据对象,挂载到 Vue 实例中

    // 所有的组件,就可以直接从 store 中获取全局的数据了

    store

})

3. Vuex 的核心概念

3.1 核心概念概述

Vuex 中的主要核心概

State
Mutation
Action
Getter

3.2 State

State 提供唯一的公 Store State 中进行存储。


// 创建store数据源,提供唯一公共数据

const store = new Vuex.Store({
  state: { count: 0 }
})

组件访问 State 中数据的第一


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

组件访问 State 中数据的第二(以下操作均在想要访问State的组件中操作 )

// 1. 从 vuex 中按需导入 mapState 函数

import { mapState } from 'vuex'

通过刚才导入的 mapState 函数,将当前 computed 计算属性:

// 2. 将全局数据,映射为当前组件的计算属性

computed: {
    ...mapState(['count'])
}

3.3 Mutation

Mutation 用于变更 Store 的数据。

只能通过 mutation 变更 Store 数据,不可以直操作 Store 中的数据。

通过这种方式来稍

// 定 义 Mutation
const store = new Vuex.Store({
    state: {
      count: 0
},
mutations: {
    add(state) {
      // 变更状态
      state.count++
    }
  }
})
// 触发mutation
methods: {
  handle1() {
    // 触发 mutations 的第一种方式
    this.$store.commit('add')
   }
}

可以在触发 mutations 时传递参数:

// 定义Mutation
const store = new Vuex.Store({
  state: {
    count: 0
},
mutations: {
  addN(state, step) {
    // 变更状态
    state.count += step
    }
  }
})
// 触发mutation  
methods: {
  handle2() {
    // 在调用 commit 函数,
    // 触发 mutations 时携带参数
    this.$store.commit('addN', 3)
    }
}

this.$store.commit() 是触发 mutations 的第一种方式触发 mutations 第二种方式

// 1. 从 vuex 中按需导入 mapMutations 函数

import { mapMutations } from 'vuex'

通过刚才导入的 mapMutations 函数,将需要的 mutations 函数件的 methods 方法:

// 2. 将指定的 mutations 函数,映射为当前组件的 methods 函数

methods: {

    ...mapMutations(['add', 'addN'])

}

3.4 Action

Action 用于处理异步务。

如果通过异步据, Action,使用 Mutation, Action 中还是要通过Mutation 的方式间接变更据。

// 定 义 Action
const store = new Vuex.Store({
  // ...省略其他代码
  mutations: {
    add(state) {
      state.count++
  }
},
actions: {
  addAsync(context) {
    setTimeout(() => {
      context.commit('add')
    }, 1000)
  }
 }
})
// 触发 Action
methods: {
  handle() {
    // 触发 actions 的第一种方式
    this.$store.dispatch('addAsync')
  }
}

 触发 actions 异步任务时携

// 定 义 Action
const store = new Vuex.Store({
  // ...省略其他代码
  mutations: {
    addN(state, step) {
      state.count += step
  }
},
actions: {
   addNAsync(context, step) {
     setTimeout(() => {
       context.commit('addN', step)
     }, 1000)
    }
  }
})
// 触发 Action
methods: {
  handle() {
    // 在调用 dispatch 函数,
    // 触发 actions 时携带参数
    this.$store.dispatch('addNAsync', 5)
  }
}

this.$store.dispatch() 是触发 actions 的第一种方式, actions 第二种方式

// 1. 从 vuex 中按需导入 mapActions 函数

import { mapActions } from 'vuex'

通过刚才导入的 mapActions 函数,将需要的 actions 函数,映射为件的 methods 方法:

// 2. 将指定的 actions 函数,映射为当前组件的 methods 函数

methods: {
  ...mapActions(['addASync', 'addNASync'])
}

3.5 Getter

Getter 用于对 Store 中的数据进行据。

Getter 可以对 Store 中已有的数据类似 Vue 的计算属性。

Store 中数据发生变,Getter 的数据也会跟着化。

// 定 义 Getter

const store = new Vuex.Store({
  state: {
    count: 0
  },
  getters: {
    showNum: state => {
      return '当前最新的数量是【'+ state.count +'】'
      }
    }
})

使用 getters 第一种方式

this.$store.getters.名称

使 getters 第二种方式

import { mapGetters } from 'vuex'
computed: {

  ...mapGetters(['showNum'])

}

4. Vuex 的小案例:计数器

 示例代码:(只提供重要组成部分)

main.js部分:

import { createApp } from 'vue'
import App from './App.vue'
import store from './store'

createApp(App).use(store).mount('#app')

App.vue部分:






store.js部分(vuex部分):

import { createStore } from 'vuex'

export default createStore({
  state: { count: 0 },
  getters: {
    showNum: (state) => {
      return '当前最新的数量是[' + state.count + ']'
    }
  },
  mutations: {
    add(state) {
      state.count++
    },
    sub(state) {
      state.count--
    },
    addN(state, step) {
      state.count += step
    },
    subN(state, step) {
      state.count -= step
    }
  },
  actions: {
    addAsync(context) {
      setTimeout(() => {
        context.commit('add')
      }, 1000)
    },
    addNAsync(context, step) {
      setTimeout(() => {
        context.commit('addN', step)
      }, 1000)
    },
    subAsync(context) {
      setTimeout(() => {
        context.commit('sub')
      }, 1000)
    },
    subNAsync(context, step) {
      setTimeout(() => {
        context.commit('subN', step)
      }, 1000)
    }
  },
  modules: {}
})

Addition.vue部分:






Subtraction部分:






你可能感兴趣的:(Vue,vue.js,前端,vuex,数据共享,VUE)