VueX学习 - 状态管理

news/2024/7/9 23:52:39 标签: Vue, VueX, 状态管理

文章目录

      • 1. 概述
      • 2. 传统Vue组件传值
      • 3. 使用Vuex

1. 概述

1. 使用场景:多个组件之间的数据需要保持一致 - 即组件之间的沟通

2. 原理:有个仓库存储数据,所有组件共享该仓库存储的数据,一旦该仓库数据改变,所有跟该仓库数据绑定的的值都动态的进行改变,不用每次都发送$emit进行改父组件的值依次进行传递。

3. @:表示src目录下

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-u4PZO1BZ-1587887321541)(en-resource://database/23232:1)]

vuex执行模块
state:仓库存储的数据源-即一个对象(键值对)
actions:通过这个模块调用mutations里面的自定义的数据处理方法,在此之间可以进行业务逻辑的处理 - 参数有context(进行commit,mutaions的方法)
mutations:对state操作的自定义方法,参数有state属性
getters:为组件提供比较固定少改变的值- 类似vue的computed属性里面的方法 - 参数是state

Vue_25">2. 传统Vue组件传值

下列的场景不断的通过子组件发送$emit(“自定义事件”) 进行修改父亲的值 - 实在是太麻烦了


[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-iJ3z278k-1587887321552)(en-resource://database/23228:1)]


上图购物车场景的数据流通图
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-TmmGdfr2-1587887321558)(en-resource://database/23230:1)]

Vuex_47">3. 使用Vuex

  1. 步骤1 - 安装vuex
npm install vuex --s

  1. 入口main.js添加下列代码


import Vuex from "vuex";
Vue.use(Vuex);

var store1 = new Vuex.Store({

    state: {
        //键值对 - 仓库存储的值
        totalcount: 1,
        cartsList: []
    },
    
    
    // 其实就是相当于state了,不够其又不是state。使用时像state里使用即可
    // this.$store.getters.cartPriceSum
    getters: {
       
       // 默认参数为state
        cartPriceSum( state ) {
          var sum = 0;

          state.cartsList.forEach((item,index) => {

            if(item.isClick == true) {
              sum = sum + item.num * item.product.current_price
            }
          }) 

          return sum;

        }
    
  },
     
    // 修改state数据 --  this.$store.commit("方法名",  方法调用传的参数)
    mutations: {
    
        //第一个默认参数为state,第二个参数payload为调用者传的实参
        updatecount(state, payload) {
            state.totalcount = payload
        }
    },
    
    //处理ajax请求 调用  this.$store.dispatch("方法")
    actions: {
        //根据自己的需求写默认参数
        //默认参数context:{ state,rootState,commit,dispatch, getters }
        method1( {state,rootState,commit,dispatch, getters} ){
            发送ajax请求
        }
        
        // payload - 方法调用者传过来的实参
        method2( { state, commit }, payload ) {
            发送ajax请求
        }
        
    }

})


//在Vue实例中进行挂载这个数据共享仓库
new Vue({
    store: store1;
})

  1. 使用
//各组件获取仓库的值:
{{ this.$store.state.属性 }}


//修改仓库的值,则必须使用仓库的mutations内的方法进行修改
this.$store.commit("方法名", payload对象);
this.$store.commit({ type:"方法名", 传的参数变量: 参数值  } ]

// 调用actions方法
this.$store.dispatch("方法名", payload对象)


http://www.niftyadmin.cn/n/1657848.html

相关文章

大华linux工程师面试题,【Linux通信面试题】面试问题:大华技术股份笔… - 看准网...

题型:选择25道 填空5道 问答5道1.USB2.0的最大传输速度是480MB/S,大约每秒可以读60MB的数据(理论值),实际速度要考虑硬件等各方面。2.const和指针的结合const int *p;const 修饰的是*p,*p不能改变(p指向的内容不能改变)&#xf…

心疼男人

旅游回来之后,男人病倒了,开始时候不以为然,根据他的体质认为是很快可以好.但是转眼一个星期过去了,他的病情无论如何吃药都不见好转.他已经好耐没有病过了..也很耐没有病得如此体虚无力了,这次的病毒折磨得他很痛苦....看见他痛苦的样子,看见他沙哑的声音,还有没有什么血色的脸…

Vue学习0 - 概述、MVVM思想、生命周期

文章目录1. 概述2. MVVM - Model、View、中间桥梁3. Vue生命周期图1. 概述 特点核心库只关心视图层数据驱动:DOM元素随着数据变化而变化组件化:一个整体页面分成多个组件合成2. MVVM - Model、View、中间桥梁 根据此图可见,DOM层、视图层的信…

linux7 virsh,linux实训第五天--Centos7搭建KVM及virsh虚拟机管理

标签:DAY05案例一-->搭建KVMKVM:Kernel-based Virtual Machine案例1.0:环境准备基于实训前面所学知识,快速配置一台图形化的虚拟主机,有以下要求案例1.1:开启支持虚拟化案例1.2:配置基于http的网络yum由于需要做KVM…

《挪威的森林》读后感

《挪威的森林》已经看了不下3遍,每次都会让自己很感伤。 用作者的话,《挪威的森林》是根据自己的短篇《萤火虫》为底本写的,那么,很多问题和情节必定在村上春树的大脑里萦绕了很久,此为其一。 作者言,这是一…

Vue学习1 - 单双向绑定、内容填充、闪动问题

文章目录0. vue基本格式1. 单向绑定 - {{属性名}}2. 双向绑定 - v-model"属性名"2.1 input绑定 - text2.2 textarea绑定2.3 input绑定 - checkbox2.3.1 多个checkbox - 即多选2.3.2 单个checkbox - 即单选2.4 input绑定 - radio2.5 select-option绑定单选多选3. 内容…

linux 蓝牙 bnet,Linux Kernel蓝牙套接字远程拒绝服务漏洞

发布日期:2010-04-06更新日期:2010-04-08受影响系统:Linux kernel 2.6.18 - 2.6.33描述:--------------------------------------------------------------------------------BUGTRAQ ID: 38898CVE ID: CVE-2010-1084Linux Kerne…

找出windows2000的boot.ini文件

以前装双系统时一直发现windows2000下的boot.ini一直找不到,用搜索什么的方法都不行,今天使用的下面的方法,竟然把他给找出来了! 先在开始的运行菜单中打入attrib boot.ini -h -s ,把他的“系统”、“隐藏”属性给去了…