• vue3+vuex4


    一、安装

    卸载vuex   :npm uninstall vuex 

    安装vuex  :yarn add vuex@next --save

    确保vue版本和vuex版本对应,否则会报错:Uncaught TypeError: vue__WEBPACK_IMPORTED_MODULE_20__.reactive is not a function

    二、配置

    在src下新建store文件夹,里面新建index.js文件

    1. import { createStore } from 'vuex'
    2. export default createStore({
    3. state: {
    4. dddd: 4
    5. },
    6. mutations: {},
    7. actions: {},
    8. modules: {}
    9. })

    在main.js中引用store

    1. import { createApp } from 'vue'
    2. import App from './App.vue'
    3. import store from './store/index'
    4. const app =createApp(App)
    5. app.use(store)
    6. app.mount('#app')

    三、使用

    Ⅰ、state中数据在组件中使用:

    方法一:this.$store.state.dddd

     

    方法二:import { mapState } from 'vuex'

    Ⅱ、mutation改变数据的使用方法(同步操作)

    使用mutation变更store中的数据,只能通过mutation变更store数据,不可以直接操作store中数据

    在store下index.js中定义gb()方法

    1. import { createStore } from 'vuex'
    2. export default createStore({
    3. state: {
    4. dddd: 4
    5. },
    6. mutations: {
    7. gb(state, value) { //value为传入其他参数
    8. state.dddd+=value
    9. }
    10. },
    11. actions: {},
    12. modules: {}
    13. })

    在组件中使用

    方法一、

    1. this.$store.commit('gb',2)
    2. //通过commit直接调用gb方法,2为传值

    方法二、

     Ⅲ、actions改变store中数据(异步操作)

    在store下index.js中定义gby()方法

    1. import { createStore } from 'vuex'
    2. export default createStore({
    3. state: {
    4. dddd: 4
    5. },
    6. mutations: {
    7. gb(state, value) {
    8. //value为传入其他参数
    9. state.dddd += value
    10. }
    11. },
    12. actions: {
    13. gby(context, value) {
    14. setTimeout(() => {
    15. context.commit('gb', value)
    16. }, 1000)
    17. }
    18. },
    19. modules: {}
    20. })

    在组件中使用:

    方法一、

        this.$store.dispatch('gby',5)

    方法二、

     

    Ⅳ、getter的使用

    getter用于怼store中的数据进行加工形成新的数据,不会修改原来的数据

    在store文件中定义

    1. import { createStore } from 'vuex'
    2. export default createStore({
    3. state: {
    4. dddd: 4
    5. },
    6. getters: {
    7. //新数据newDddd
    8. newDddd(state) {
    9. return state.dddd - 1
    10. }
    11. },
    12. mutations: {
    13. gb(state, value) {
    14. //value为传入其他参数
    15. state.dddd += value
    16. }
    17. },
    18. actions: {
    19. gby(context, value) {
    20. context.commit('gb', value)
    21. }
    22. },
    23. modules: {}
    24. })

    2、在组件中使用

    方法一、

       console.log(this.$store.getters.newDddd)

    方法二、

     

    Ⅴ、modules模块化

    首先,在原来的store文件夹中新建modules文件夹,文件夹内新建a1.js  、a2.js  、 index.js

     

     

    1. //a1.js
    2. export default{
    3. namespaced: true,
    4. state: {
    5. dddd1: 22222
    6. },
    7. getters: {
    8. newDddd(state) {
    9. return state.dddd - 1
    10. }
    11. },
    12. mutations: {
    13. gb(state, value) {
    14. //value为传入其他参数
    15. state.dddd += value
    16. }
    17. },
    18. actions: {
    19. gby(context, value) {
    20. setTimeout(() => {
    21. context.commit('gb', value)
    22. }, 1000)
    23. }
    24. },
    25. modules: {}
    26. }
    1. //a2
    2. export default {
    3. namespaced: true,
    4. state: {
    5. dddd2: 22222222222
    6. },
    7. getters: {
    8. newDddd(state) {
    9. return state.dddd - 1
    10. }
    11. },
    12. mutations: {
    13. gb(state, value) {
    14. //value为传入其他参数
    15. state.dddd += value
    16. }
    17. },
    18. actions: {
    19. gby(context, value) {
    20. setTimeout(() => {
    21. context.commit('gb', value)
    22. }, 1000)
    23. }
    24. },
    25. modules: {}
    26. }
    1. //modules文件中的index.js文件
    2. import a1 from '../modules/a1'
    3. import a2 from '../modules/a2'
    4. export default { a1, a2 }
    1. //store下的index.js文件
    2. import { createStore } from 'vuex'
    3. import modules from '../store/modules'
    4. const store = createStore({ modules })
    5. export default store

    使用举例

        console.log(this.$store.state.a1.dddd1)

    打印结果

     

  • 相关阅读:
    Leetcode hot100之“结合递归+二分“题目详解
    防火墙部署模式 -- 单臂路由模式
    关于面试-java面试题汇总
    PS笔记2_钢笔工具的形状和路径
    信奥中的数学之入门组(面向小学四年级至六年级以及初一学生)
    PyTorch修改为自定义节点
    Android Unable to determine activity name
    getBoundingClientRect、offset、page、client、screen相关API及释义合集
    ConfigMap概述
    玄子Share-Git 入门手册
  • 原文地址:https://blog.csdn.net/flhhly/article/details/126271413