【vue2】vuex基础与五大配置项

news2024/10/8 22:18:37

1d43f75f092a4050a8ce31e2d85f6868.gif

🥳博       主:初映CY的前说(前端领域)

🌞个人信条:想要变成得到,中间还有做到!

🤘本文核心:vuex基础认识、state、getters、mutations  actions、modules使用

目录(文末原素材)

 一、vuex介绍

1.vuex概念引入:

2.为什么要有vuex

3.Vuex使用场景

 二、五大核心配置项 

1.state

①原生写法

②state辅助函数mapSaatate

2.getters

①原生写法

②getters辅助函数mapGetters

3.mutations

①原生写法

②mutations辅助函数mapMutations

4.actions

②actions辅助函数mapActions

vuex工作流程:

5.modules

①原生写法

②modules封装写法

【vuex辅助函数源素材】


 一、vuex介绍

1.vuex概念引入:

当我们修改其中一个头像的时候,我们怎么同步到多个组件当中呢?

 这个是平级的非父子关系我们应该怎么传递值进去呢?用vuex来对非父子关系传值

2.为什么要有vuex

  • vuex的作用是解决多组件状态共享的问题,在大型的项目中,组件通讯会变得很混乱,使用vuex可以统一管理组件之间的通讯
  • vuex是响应式布局: 只要vuex中的数据变化,对应的组件会自动更新(类似于vue数据驱动)

3.Vuex使用场景

不是所有的场景都适用于vuex,只有在必要的时候才使用vuex,如果不必要,尽量别用

2.适合使用vuex场景

  • 这个数据需要在很多个地方要写,如果采用组件传值方式,写起来很麻烦,而且多个地方都要写
  • 例如:用户信息(姓名,头像),可能会在很多个地方使用(个人页面,评论页面等)

3.不适合使用vuex场景

  • 这个数据不需要多个地方使用,如果某个数据仅仅只是在两个组件之间通讯,优先使用props或$emit

4.vuex特点

  • 所有组件数据共享
  • 响应式: 一旦vuex数据修改,所有使用的地方都会自动更新

 二、五大核心配置项 

1.state

①原生写法

1.概念:

state提供vuex唯一的公共数据源,所有共享的数据都要统一放到store中的State中存储。

2.声明语法:

state:{
//在此处写共享属性即可
}

 3.使用语法:

$store.state.属性名

举个例子:

1.声明:

 2.使用:

可以看出我们的存放在state中的数据被我们成功的获取到啦!

②state辅助函数mapSaatate

1.概念:

将vuex中的数据映射到组件的计算属性中,简化书写操作(写在computed中)

2.使用方法:

1.导入import { mapState } from 'vuex'

2.    ...mapState([‘state中属性名’])

3.举个例子


2.getters

①原生写法

1.概念:

state的计算属性

2.声明语法:

 getters: {
    计算属性名()(state) {
      return 要返回的值
    }
  }

3.使用语法

$store.getters.getter名

举个例子

1.声明

 2.使用

可以看出我们的存放在getters中的数据被我们成功的获取到了,注意步骤是getters下

②getters辅助函数mapGetters

1.概念:

同上是简化我们的写法(写在computed中)

2.使用方法:

1.导入import { mapGetters } from 'vuex'

2.    ...mapGetters([‘getters中计算属性’])

3.举个例子


3.mutations

①原生写法

 1.概念:

state数据的修改只能通过mutations,并且mutations必须是同步的。Mutations是同步更新state数据的唯一方式!!!

2.声明语法:

  mutations:{
  	mutation名(state , 载荷 ) {
  },

每一项都是一个函数,可以声明两个形参:

第一个参数是必须的,表示当前的state。

第二个参数是可选的,表示载荷,是可选的。在使用时要传入的数据

专业术语载荷:表示额外的参数

3.使用语法

this.$store.commit('mutation名', 载荷 )

4.举个例子

1.声明

 2.使用

 当我们点击按钮的时候,我们荷载(payload)中的数据传到了mutation中随后完成我们的值传递,将我们原始的数据改变。

②mutations辅助函数mapMutations

 1.概念:

简化书写操作成方法形式(写在methods中)

2.使用方法:

1.导入import { mapMutations } from 'vuex'

2.    ...mapMutations([‘mutations名’])

3.举个例子


4.actions

 1.概念:

actions: 异步更新我们的数据(例如你的数据来源于ajax)

2.声明语法:

这个地方的载荷一般为ajax接口需要的参数,如果没有就不用传

 actions: {
    // context对象会自动传入,它与store实例具有相同的方法和属性
    action的名字: function(context, 载荷) {
      // 1. 异步操作获取数据
      // 2. commit调用mutation来修改数据
      // context.commit('mutation名', 载荷)
    }
  }

每一项都是一个函数,可以声明两个形参:

第一个参数是必须的,表示当前的state。

第二个参数是可选的,表示载荷,是可选的。在使用时要传入的数据

专业术语载荷:表示额外的参数

3.使用语法

this.$store.dispath ( 'actions的名字',参数 )

4.举个例子

4.1.声明

 4.2.使用

②actions辅助函数mapActions

 1.概念:

简化书写操作成方法形式(写在methods中)

2.使用方法:

1.导入import { mapActions } from 'vuex'

2.    ...mapmapActions([‘action名’])

3.举个例子

vuex工作流程:

我们先触发了Actions中的异步操作,当异步结果出来之后(如果没有异步操作则直接执行后面的操作),我们触发commit调用mutations去修改我们的state,最后因为我们是具有响应式的特点,因此我们的数据被修改成功。


5.modules

①原生写法

1.概念:

模块化处理vuex数据,将我们每个模块的vuex数据分开处理

2.声明语法:

//在我们的store/index.js中书写
 modules: {
  	模块名1: {
    	// namespaced为true,则在使用mutations时,就必须要加上模块名
      	namespaced: true, 

 3.使用语法:

//state
全局的: $store.state.数据项名
模块的: $store.state.模块名.数据项名
//getters
全局的: $store.getters.getter名
模块的: $store.getters['模块名/getters名']
//mutations
全局的: $store.commit('mutations名',载荷) 
模块的: $store.commit('模块名/mutations名',载荷)
//actions
全局的: $store.dispatch('actions名',载荷) 
模块的: $store.dispatch('模块名/actions名',载荷)

 4.举个例子

4.1声明:

我们先封装模块

在index.js中导入

 4.2使用:

 注意:模块化语法一定一定需要开启命名空间namespaced:true

②modules封装写法

 注意点:我们分了模块,我们的数据要单独的导入进来喔


【vuex辅助函数源素材】

1.先搭建我们的脚手架(务必勾选上以下选项)

 2.引入我们的组件

App.vue

<template>
  <div>
    <!-- 顶部导航栏 -->
    <div class="footer_wrap">
      <!-- 路由导航 -->
      <!-- <router-link to="/native">原生写法</router-link> -->
      <router-link to="/facilitate">辅助函数写法</router-link>
    </div>
    <!-- 下面内容 -->
    <div class="top">
      <!-- 路由出口 -->
      <router-view></router-view>
    </div>
  </div>
</template>

<script>
export default {
  name: 'facilitate-page',

  methods: {}
}
</script>

<style scoped>
body,
html {
  margin: 0;
  padding: 0;
}
.footer_wrap {
  position: fixed;
  left: 0;
  top: 0;
  display: flex;
  width: 100%;
  text-align: center;
  background-color: #333;
  color: #ccc;
}
.footer_wrap a,
span {
  cursor: pointer;
  flex: 1;
  text-decoration: none;
  padding: 15px 0;
  line-height: 20px;
  background-color: #333;
  color: #ccc;
  border: 1px solid black;
}
.footer_wrap a:hover,
span:hover {
  background-color: #555;
}

.top {
  padding-top: 50px;
}

.footer_wrap .router-link-active {
  background-color: #000;
}
</style>

Facilitate.vue(Views/ Facilitate.vue)

<template>
  <div>
    <h2>辅助函数写法</h2>
    <div class="user">
      <h3>用户信息</h3>
      <p>姓名:{{ userInfo.name }}</p>
      <p>年龄:{{ userInfo.age }}</p>
      <button @click="doChange1">点我修改</button>
    </div>
    <div class="setting">
      <h3>用户设置</h3>
      <p>颜色主题:{{ settingInfo.color }}</p>
      <p>字体大小:{{ settingInfo.fontSize }}</p>
      <button @click="doChange2">点我设置</button>
    </div>
    <div class="shopcar">
      <h3>购物车数量</h3>
      <p>当前数量:{{ count }}</p>
      <p>当前总价格:{{ total }}</p>

      <button @click="doChange3">点我数量加一</button>
    </div>
  </div>
</template>

<script>
// 导入辅助函数
import { mapState, mapGetters, mapMutations, mapActions } from 'vuex'

export default {
  name: 'facilitate-page',
  computed: {
    ...mapState('user', ['userInfo']),
    ...mapState('setting', ['settingInfo']),
    ...mapState('shopcar', ['count']),
    ...mapGetters('shopcar', ['total'])
  },
  methods: {
    ...mapMutations('user', ['updateUserInfo']),
    ...mapMutations('setting', ['updateSettingInfo']),
    ...mapActions('shopcar', ['setCount']),
    // 1.点击修改信息
    doChange1 () {
      // 提交mutations
      this.updateUserInfo({
        name: '结束啦',
        age: 666
      })
    },
    // 2.点击修改设置
    doChange2 () {
      // 提交mutations
      this.updateSettingInfo({ color: 'green', fontSize: '20px' })
    },
    // 3.点击购买按钮
    doChange3 () {
      // 提交actions
      this.setCount(this.count + 1)
    }
  }
}
</script>

<style scoped>
.user {
  border: 2px solid green;
  margin: 5px;
}

.setting {
  border: 2px solid orange;
  margin: 5px;
}

.shopcar {
  border: 2px solid magenta;
  margin: 5px;
}
</style>

3.引入路由

 index.js (router/index.js)

import Vue from 'vue'
import VueRouter from 'vue-router'

// 1.导入组件
// import native from '@/views/Native.vue'
import facilitate from '@/views/Facilitate.vue'

Vue.use(VueRouter)

// 2.路由规则
const routes = [
  // { path: '/', redirect: '/Native' },
  // { path: '/native', component: native },
  { path: '/facilitate', component: facilitate }
]

const router = new VueRouter({
  routes
})

export default router

    愿这一份资料能帮帮助到你,如果可以请关注博主呦!!!                                       

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/191254.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【JavaEE初阶】第九节.多线程 (基础篇)定时器(案例三)

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 前言 一、定时器概述、 二、定时器的实现 2.1 Java标准库 定时器的使用 2.2 自己模拟实现一个定时器 2.3 对自己实现的定时器的进一步优化 2.3.1 为何需要再进行优化 2…

CMOS图像传感器——了解光圈

在之前有提到传感器英寸,也提到了曝光三要素之一的ISO,这里主要说明另外一个曝光三要素——光圈。在本文中,我们将介绍光圈及其工作原理。 一、什么是光圈 光圈可以定义为镜头中的开口,光线通过该开口进入相机。类比眼睛是的工作原理,就容易理解了:当人在明亮和黑暗的环…

【链表之单链表】

前言&#xff1a;链表是什么&#xff1f; 链表的操作 1.单链表的结构 2.头文件的包含 3.动态申请一个节点 4.单链表打印 5.单链表尾插 6.单链表头插 7.单链表尾删 8.单链表头删 9.单链表查找 10.单链表在pos位置之后插入x 11.单链表在pos位置之前插入x 12. 单链表…

【数据挖掘】基于粒子群算法优化支持向量机PSO-SVM对葡萄酒数据集进行分类

1.粒子群算法的概念 PSO是粒子群优化算法&#xff08;Particle Swarm Optimization&#xff09;的英文缩写&#xff0c;是一种基于种群的随机优化技术&#xff0c;由Eberhart和Kennedy于1995年提出。粒子群算法是模仿昆虫、兽群、鸟群和鱼群等的群集行为&#xff0c;这些群体按…

中国电子学会2021年03月份青少年软件编程Scratch图形化等级考试试卷三级真题(含答案)

2021-03Scratch三级真题 分数&#xff1a;100题数&#xff1a;38 一、单选题(共25题&#xff0c;每题2分&#xff0c;共50分) 1.在《采矿》游戏中&#xff0c;当角色捡到黄金时财富值加1分&#xff0c;捡到钻石时财富值加2分&#xff0c;下面哪个程序实现这个功能&#xff1…

【软件测试】资深测试总结的测试必备8点,堪称测试人的好莱坞大片......

目录&#xff1a;导读前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09;前言 测试8板斧。测试8板…

Task8:Excel的数据可视化

目录一 条形图二 条件单元格格式三 迷你图四 练习题一 条形图 【例子】直观的展示销售额之间的差别 方法&#xff1a;【开始】–>【条件格式】–>【数据条】 【只想显示条形图&#xff0c;不想显示金额】 1.条形图区域—>条件格式—>管理规则 2.选择设置的规则&a…

单应性Homography梳理,概念解释,传统方法,深度学习方法

Homography 这篇博客比较清晰准确的介绍了关于刚性变换&#xff0c;仿射变换&#xff0c;透视投影变换的理解 单应性变换 的 条件和表示 用 [无镜头畸变] 的相机从不同位置拍摄 [同一平面物体] 的图像之间存在单应性&#xff0c;可以用 [透视变换] 表示 。 opencv单应性变换求…

Active Directory计算机备份和恢复

在Active Directory&#xff08;AD&#xff09;环境中&#xff0c;用户通过域中的计算机认证他们自身。从AD中删除这些计算机账户时&#xff0c;系统也会自动从域中删除它们。于是&#xff0c;用户不能再通过些计算机登录网络。为允许用户访问域资源&#xff0c;必须恢复这些已…

聚集千百个企业管理系统的API资产,打造API资产全生命周期一站式集成体验

API——接口&#xff0c;作为软件世界中的连接服务和传输数据的重要管道&#xff0c;已经成为数字时代的新型基础设施&#xff0c;是各领域驱动数字变革的重要力量之一。传统企业集成主要采用点对点或ESB集成方式&#xff0c;基于全新API战略中台的API新型集成方式通过解耦系统…

SpringBoot跨域请求解决方案详细分析

跨域的定义 跨域是指不同域名之间的相互访问&#xff0c;这是由浏览器的同源策略决定的&#xff0c;是浏览器对JavaScript施加的安全措施&#xff0c;防止恶意文件破坏。同源策略&#xff1a;同源策略是一种约定&#xff0c;它是浏览器最核心的也是最基本的安全策略&#xff0…

【数据产品】缓存设计

背景&#xff1a;为什么需要做缓存&#xff1f; 我所做的产品的指标设计越来越复杂&#xff0c;查询性能也随之下降。因此需要增加缓存层&#xff0c; 以提高接口查询效率。 哪些层需要做缓存&#xff1f; 随着指标系统的应用&#xff0c;该产品的查询逻辑也越来越简单&…

二分查找核心思路--单调性--极值

在最初的二分查找中&#xff0c;我们将一组数据按大小排序&#xff0c;然后根据arr[mid]与要查找的k的大小比较&#xff0c;从而每次去掉一半的数字&#xff0c;使时间复杂度简化为O&#xff08;logN&#xff09;。 排序本质上是让数据的单调性统一&#xff0c;变为单增或单减…

spring中的JSR-303统一校验

1.在前后端的传输参数的过程中数据在何处校验? 在前后端都需要进行校验,只是分工不同. 2.各个层的校验内容: 1.Controller层主要负责校验残水的合法性,包括: 必填的参数字段,数据格式的校验 2.Service层的业务校验是审核业务中的规则的相关内容,比如:课程已经审核通过所以提…

vue3 为何比 vue2 快

vue3 为何比 vue2 快 测试环境&#xff1a;https://vue-next-template-explorer.netlify.app/ 1、proxy 响应式 vue3 优缺点&#xff1a; 深度监听性能更好可监听 新增 / 删除 属性可监听数组变化Proxy 能规避 Object.defineProxy 的问题Proxy 无法兼容所有浏览器&#xff…

OAuth2介绍

目录 一、什么是OAuth2 二、OAuth2中的角色 三、认证流程 四、令牌的特点 五、OAuth2授权方式 授权码 隐藏方式 密码方式 凭证方式 一、什么是OAuth2.0 概念&#xff1a;第三方授权解决方案 OAuth2.0是目前使用非常广泛的授权机制&#xff0c;用于授权第三方应用获取…

[NRF52] mesh DFU

mesh DFU升级过程&#xff1a;完整流程&#xff1a;以前nRF SDK DFU的实现是通过nRF51 Dongle配合主机nRF connect工具&#xff0c;且借助Secure DFU的后台式更新速率较快&#xff08;见另一篇笔记&#xff09;&#xff0c;现在的nRF mesh DFU分角色&#xff0c;全都由DK充当&a…

什么是单体应用?什么是微服务?

Monolith&#xff08;单体应用&#xff09;&#xff0c; 也称之为单体系统或者是 单体架构 。就是一种把系统中所有的功能、模块、组件等耦合在一个应用中应用最终打成一个(war,jar)包使用一个容器(Tomcat)进行部署&#xff0c;通常一个应用享用一个数据库。 也就是将所有的代码…

Java版数据结构与算法笔记

文章目录一、数据结构与算法概述及题目1、数据结构和算法的关系2、线性结构与非线性结构Ⅰ-线性结构Ⅱ-非线性结构3、经典面试题Ⅰ-字符串匹配问题&#xff1a;Ⅱ-汉诺塔游戏Ⅲ-八皇后问题:Ⅳ-马踏棋盘算法4、几个实际编程中遇到的问题Ⅰ-字符串替换问题Ⅱ-一个五子棋程序Ⅲ-约…

这家芯片企业,从创立之初就用 Authing 管理身份

在德州仪器和苹果的经验&#xff0c;让我深知统一身份管理要从 Day 1 做起。——Alpha Cen 联合创始人 & CEO 王璠 案例亮点&#xff1a; 打通 2000 主流应用、满足芯片初创企业统一身份需求 一周快速上线&#xff0c;产品开箱即用&#xff0c;后续无需费力运维 基于协同…