首页 > 其他分享 >vue(八)状态管理vuex

vue(八)状态管理vuex

时间:2023-07-10 19:34:05浏览次数:33  
标签:状态 vue getNum state num export import vuex

安装和使用

Vuex是一个专门为vue.js应用程序开发的状态管理模式 + 库,采用集中式存储管理应用的所有组件的状态,并以相应的规则保证状态以一种可预测的方式发生变化。

简单说,状态管理可以理解成为了更方便的管理组件之间的数据交互,提供了一个集中式的管理方案,任何组件都可以按照指定的方式进行读取和改变数据。

1、安装 npm install --save vuex

2、配置Vuex文件 store/index.js

import {createStore} from "vuex"

export default createStore({
// 所有状态(数据)都存储在state中,这里设置一个初始状态
    state:{
        num:1
    }
})

3、在main.js中引入

import store from './store'

const app= createApp(App)
app.use(store)

4、在所有组件中使用:可以使用 $mapState 读取

# 1、使用$读取数据
<h3>num= {{ $store.state.num }}</h3>

# 2、使用mapState读取
  <h3>num={{ num }}</h3>

<script>
# 导入mapState
import {mapState} from 'vuex'

export default {
    name: "App",
    computed:{
      ...mapState(["num"]) // 使用mapState获取num
    }
}

状态管理核心

常用的核心概念包含 State, Getter, Mutation, Action

  • Getter 对Vuex的数据进行过滤

# 设置 getters 
import {createStore} from "vuex"

export default createStore({
    state:{
        num:1
    },
    getters:{
        getNum(state){
            return state.num>1?state.num : 2
        }
    }
})

# 使用getters获取数据
  <h3>num=={{ getNum }}</h3>

import {mapGetters} from 'vuex'
export default {
    name: "App",
    computed:{
      ...mapGetters(["getNum"])
    }
}
  • Mutation 对Vuex的数据进行修改,只支持同步操作,每个Mutation都有一个字符串的事件类型和一个回调函数,这个回调函数就是我们实际进行状态更改的地方,它接收state作为第一个参数

# 设置Mutation
export default createStore({
    state:{
        num:1
    },
    getters:{
        getNum(state){
            return state.num
        }
    },
    mutations:{
        setNum(state,n){ //n作为可传参数
            state.num=state.num+n
        }
    }
})

# 使用Mutation设置数据。通过事件来设置数据
  <h3>num=={{ getNum }}</h3>
  <button @click="addNumHandler">add</button>

import {mapGetters,mapMutations} from 'vuex'

export default {
    name: "App",
    computed:{
      ...mapGetters(["getNum"])
    },
    methods:{
      ...mapMutations(["setNum"]),
      addNumHandler(){
        this.setNum(5)
      }
    }
    
}
  • Action 类似Mutation,不同在于

    • Action提交的是Mutation,而不是直接变更状态

    • Action可以包含任意异步操作,网络请求就可以放这里

# 设置Action
import {createStore} from "vuex"
import axios from "axios"

export default createStore({
    state:{
        num:1
    },
    getters:{
        getNum(state){
            return state.num
        }
    },
    mutations:{
        setNum(state,n){
            state.num=state.num+n
        }
    },
    actions:{
        asyncAddNum({commit}){
            axios.get("http://xxx/x").then
            (res=>{
                    commit("setNum",res.data)    //调用 Mutation 设置数据
                })
        }
    }
})
# 使用Action设置数据
  <h3>num=={{ getNum }}</h3>
  <button @click="addNumHandler">add</button>

import {mapGetters,mapMutations,mapActions} from 'vuex'

export default {
    name: "App",
    computed:{
      ...mapGetters(["getNum"])
    },
    methods:{
      ...mapMutations(["setNum"]),
      ...mapActions(["asyncAddNum"]),
      // 事件回调函数调用 actions 设置的请求
      addNumHandler(){
        this.asyncAddNum();
      }
    }
    
}

 

标签:状态,vue,getNum,state,num,export,import,vuex
From: https://www.cnblogs.com/yjh1995/p/17542087.html

相关文章

  • Vue3 的 hook函数
    Vue3的hook函数相当于vue2的mixin,不同在于hooks是函数;Vue3的hook函数可以帮助我们提高代码的复用性,让我们能在不同的组件中都利用hooks函数;其实就是代码的复用,可以用到外部的数据,生命钩子函数...,具体怎么用直接看代码,//一般都是建一个hooks文件夹,都写在里面impor......
  • vue3封装echarts组件数据更新不同步问题
    vue3封装echarts组件数据更新不同步问题背景:​ 记录一下项目中遇到的bug,在vue3+echarts环境下,为了方便使用,我将echarts封装成组件使用,使用的时候只需要把对应的值传入给chart组件就行,但是在传入真实数据的时候遇到了问题,就是传入value值与图表组件显示的数值不一致。(如图)......
  • Vue + Element ui 实现动态表单,包括新增行/删除行/动态表单验证/提交功能
    总结/朱季谦最近通过Vue+Elementui实现了动态表单功能,该功能还包括了动态表单新增行、删除行、动态表单验证、动态表单提交功能,趁热打铁,将开发心得记录下来,方便以后再遇到类似功能时,直接拿来应用。简化的页面效果图如下:最开始,我是用了纯粹的表格形式,后来发现,这种形式在提交......
  • Nginx负载均衡状态值max_fails和fail_timeout
    max_connsmax_conns=number:用来设置代理服务器同时活动链接的最大数量,默认为0,表示不限制,使用该配置可以根据后端服务器处理请求的并发量来进行设置,防止后端服务器被压垮。max_fails和fail_timeoutmax_fails=number:设置允许请求代理服务器失败的次数,默认为1。fail_timeo......
  • labview风机发电程序,输出波形和发电的状态图片。 本
    labview风机发电程序,输出波形和发电的状态图片。本次提供源代码ID:3940646734027958......
  • 基于pmu的多接地配电系统状态估计.matlab源代码,,代码按照高水平文章复现,保证正确
    基于pmu的多接地配电系统状态估计.matlab源代码,,代码按照高水平文章复现,保证正确线性网络建模和相量测量单元(pmu)简化了传统的系统状态估计问题。现有的基于sse-pmu的多相模型是线性的,其中接地电阻是一个固定不变的参数。然而,接地电阻很大程度上取决于湿度和温度随时间的变化。......
  • vue-组件
    <!DOCTYPEhtml><html><head><title>VueDemo</title><scriptsrc="https://cdn.staticfile.org/vue/2.2.2/vue.min.js"></script></head><body><divid="firstVue">......
  • Vue监听store中数据变化的2种方式
    http://chart.zhenglinglu.cn/pages/068e2f/#方式一......
  • Vue路由新开页面跳转和传参传递
    需求:在后台管理系统首页列表项中,点击详情跳转到系统中指定菜单的路由要求新开窗口并需要带上参数查询。第一种方法:1const{id}=item;2letrouteUrl=this.$router.resolve({3path:'/xxx',//路由地址4query:{id}//参数信息5});6window.open(ro......
  • VUE中定义全局配置方法
    方法一:main.ts中constwsapi="ws://localhost:8081";constappConfig={wsapi,};constapp=createApp(App);//ProvidetheappConfigasaglobalpropertyapp.config.globalProperties.$appConfig=appConfig;app.use(store)VUE中1、setup方法中co......