【vue2】vuex超超超级详解!(核心五大配置项)

这篇具有很好参考价值的文章主要介绍了【vue2】vuex超超超级详解!(核心五大配置项)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

vue2 vuex,vue2,前端,javascript,vue.js,前端框架,开发语言

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

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

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

目录(文末有原素材喔)

 一、vuex介绍

1.vuex概念引入:

2.为什么要有vuex

3.Vuex使用场景

4.vuex工作流程:

二、五大核心配置项 

1.state

①原生写法

②state辅助函数mapSaatate

2.getters

①原生写法

②getters辅助函数mapGetters

3.mutations

①原生写法

②mutations辅助函数mapMutations

4.actions

①原生写法

②actions辅助函数mapActions

5.modules

①原生写法

②modules封装写法

【vuex辅助函数源素材】


 一、vuex介绍

1.vuex概念引入:

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

vue2 vuex,vue2,前端,javascript,vue.js,前端框架,开发语言

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

2.为什么要有vuex

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

3.Vuex使用场景

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

1..适合使用vuex场景

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

2.不适合使用vuex场景

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

3.vuex特点

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

4.vuex工作流程:

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

vue2 vuex,vue2,前端,javascript,vue.js,前端框架,开发语言


二、五大核心配置项 

1.state

①原生写法

1.概念:

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

2.声明语法:

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

 3.使用语法:

$store.state.属性名

举个例子:

1.声明:

vue2 vuex,vue2,前端,javascript,vue.js,前端框架,开发语言

 2.使用:

vue2 vuex,vue2,前端,javascript,vue.js,前端框架,开发语言

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

②state辅助函数mapSaatate

1.概念:

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

2.使用方法:

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

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

3.举个例子

vue2 vuex,vue2,前端,javascript,vue.js,前端框架,开发语言


2.getters

①原生写法

1.概念:

state的计算属性

2.声明语法:

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

3.使用语法

$store.getters.getter名

举个例子

1.声明

vue2 vuex,vue2,前端,javascript,vue.js,前端框架,开发语言

 2.使用

vue2 vuex,vue2,前端,javascript,vue.js,前端框架,开发语言

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

②getters辅助函数mapGetters

1.概念:

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

2.使用方法:

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

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

3.举个例子

vue2 vuex,vue2,前端,javascript,vue.js,前端框架,开发语言


3.mutations

①原生写法

 1.概念:

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

2.声明语法:

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

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

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

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

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

3.使用语法

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

4.举个例子

1.声明

vue2 vuex,vue2,前端,javascript,vue.js,前端框架,开发语言

 2.使用

vue2 vuex,vue2,前端,javascript,vue.js,前端框架,开发语言

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

②mutations辅助函数mapMutations

 1.概念:

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

2.使用方法:

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

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

3.举个例子

vue2 vuex,vue2,前端,javascript,vue.js,前端框架,开发语言


4.actions

①原生写法

 1.概念:

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

vue2 vuex,vue2,前端,javascript,vue.js,前端框架,开发语言

2.声明语法:

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

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

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

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

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

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

3.使用语法

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

4.举个例子

4.1.声明

vue2 vuex,vue2,前端,javascript,vue.js,前端框架,开发语言

 4.2.使用

vue2 vuex,vue2,前端,javascript,vue.js,前端框架,开发语言

②actions辅助函数mapActions

 1.概念:

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

2.使用方法:

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

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

3.举个例子

vue2 vuex,vue2,前端,javascript,vue.js,前端框架,开发语言


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声明:

我们先封装模块

vue2 vuex,vue2,前端,javascript,vue.js,前端框架,开发语言

在index.js中导入

vue2 vuex,vue2,前端,javascript,vue.js,前端框架,开发语言

 4.2使用:

vue2 vuex,vue2,前端,javascript,vue.js,前端框架,开发语言

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

②modules封装写法

vue2 vuex,vue2,前端,javascript,vue.js,前端框架,开发语言

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


【vuex辅助函数源素材】

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

vue2 vuex,vue2,前端,javascript,vue.js,前端框架,开发语言

 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

    愿这一份资料能帮帮助到你,如果可以请关注博主呦!!!                                       文章来源地址https://www.toymoban.com/news/detail-778764.html

到了这里,关于【vue2】vuex超超超级详解!(核心五大配置项)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Vue2:组件间通信框架Vuex

    功能介绍: 简单说就是 Vue 项目中,各个组件间通信的一种框架 相较于之前的 全局事件总线 ,该框架更实用! 提高了代码的复用率,把核心业务代码,集中到 store 中,这样,一处实现,处处调用。 原理: VC 调用 actions actions调用mutations mutations调用state VC读取state 完美闭环

    2024年02月19日
    浏览(30)
  • 前端学习---vue2--指令修饰符详解

    写在前面: 前端感觉系统学起来还行,我也不晓得我是咋快速入门1个月就开始看实习公司代码的。然后现在开始系统复习,然后感觉有的封装的还可以,不过就是我不晓得,像这个指令修饰符,其实说逻辑难写,倒是也没有,就是简单不用自己写. 就像后端判断字符串是否为

    2024年02月14日
    浏览(32)
  • 【无标题】vue的五大核心

    Vuex是一个Vue的插件,用于管理状态( 数据 ) Vuex作用场景: 祖先组件向子孙组件传递数据,层级非常深 多个组件间的数据共享 Vue的核心功能 用于注册、存放数据的仓库 1、直接获取仓库的数据 2、通过辅助函数获取仓库数据 mapState 特点:map 映射 State仓库 : 与仓库里的sta

    2024年02月06日
    浏览(28)
  • 开始学习Vue2(axios和Vuex)

    一、 Axios 1、 Axios  简介 Axios   是一个基于  promise   网络请 求库 ,作用于 node.j s  和浏   览器中。它是  isomorphic  的(即同一套代码可以运行在浏览器 和 node.js 中)。在服务端它使用原生  node.js http  模块,  而在 客户端   (浏览端)   则使用   XMLHttpRequests。 2、 Axios  的

    2024年02月20日
    浏览(33)
  • 【Vue】vuex-五个核心

    前言 🚩🚩🚩 💎个人主页: 阿选不出来 💨💨💨 💎个人简介: 一名大二在校生, 不定时更新自己学习道路上的一些笔记. 💨💨💨 💎目前开发的专栏: JS 🍭Vue🍭JS进阶 💨💨💨 💎接上一篇 Vue-条件,列表渲染-key的底层原理 Vuex 是一个专为 Vue.js 应用程序开发的状态管理模式

    2023年04月26日
    浏览(35)
  • Vue2:Vuex中使用mapMutations和mapActions

    上一节,我们学会在 vc 的 computed 模块中,使用 mapState和mapGetters 来简化代码 这一节,我们学习在 vc 的 methods 模块中,使用 mapMutations和mapActions 来简化代码 在 vc 的 methods 中,我们会使用到 store 的 dispatch 和 commit 。 如果涉及到许多的方法都要用到 store 那么,这个时候,就可

    2024年02月20日
    浏览(40)
  • vue2(Vuex)、vue3(Pinia)、react(Redux)状态管理

    Vuex 是一个专为 Vue.js应用程序开发的状态管理模式。它使用集中式存储管理应用的所有组件的状态,以及规则保证状态只能按照规定的方式进行修改。 State(状态) :Vuex 使用单一状态树,即一个对象包含全部的应用层级状态。这个状态树对应着一个应用中的所有状态。 Gett

    2024年01月23日
    浏览(48)
  • 前端vue2、vue3去掉url路由“ # ”号——nginx配置

    大家好,我是yma16,本文分享关于vue2、vue3去掉url路由 # 号——nginx配置。 html的 hash模式 HTML的hash模式指的是URL中的锚点部分(#后面的内容)被用于在单个页面中显示不同的内容,而不是导航到不同的页面。例如: 在这个示例中, #about 部分是一个锚点,用于在页面上显示关

    2024年02月11日
    浏览(72)
  • vue2+webpack升级vue3+vite,在vue3组合式编程中使用vuex

    同学们可以私信我加入学习群! 我的项目是从vue2+webpack升级为vue3+vite,这种升级工作,其实最重要的不是如何快速准确地把原有vue2项目全部重构为vue3项目,因为这是不现实的。 升级工作一定是一个长久的持续过程,所以如何保证旧的vue2项目与新的vue3模块之间互相兼容,才

    2024年01月18日
    浏览(55)
  • 前端Vue入门-day07-Vuex入门

    (创作不易,感谢有你,你的支持,就是我前行的最大动力,如果看完对你有帮助,请留下您的足迹) 目录 自定义创建项目 vuex概述 构建 vuex [多组件数据共享] 环境  创建一个空仓库 state 状态 1. 提供数据: 2. 使用数据: mutations  辅助函数 - mapMutations actions 辅助函数 - mapAc

    2024年02月14日
    浏览(40)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包