首页 > 其他分享 >【Vue2+3入门到实战】(18)VUE之Vuex状态管理器概述、VueX的安装、核心概念 State状态代码实现 详细讲解

【Vue2+3入门到实战】(18)VUE之Vuex状态管理器概述、VueX的安装、核心概念 State状态代码实现 详细讲解

时间:2024-01-15 14:07:34浏览次数:39  
标签:VUE 管理器 18 state vue Vuex 组件 vuex store



目录

  • 一、[Vuex](https://vuex.vuejs.org/zh/) 概述
  • 1.是什么
  • 2.使用场景
  • 3.优势
  • 4.注意:
  • 二、需求: 多组件共享数据
  • 1.创建项目
  • 2.创建三个组件, 目录如下
  • 3.源代码如下
  • 三、vuex 的使用 - 创建仓库
  • 1.安装 vuex
  • 2.新建 `store/index.js` 专门存放 vuex
  • 3.创建仓库 `store/index.js`
  • 4 在 main.js 中导入挂载到 Vue 实例上
  • 5.测试打印Vuex
  • 四、核心概念 - state 状态
  • 1.目标
  • 2.提供数据
  • 3.访问Vuex中的数据
  • 4.通过$store访问的语法
  • 5.代码实现
  • 5.1模板中使用
  • 5.2组件逻辑中使用
  • 5.3 js文件中使用


【Vue2+3入门到实战】(18)VUE之Vuex状态管理器概述、VueX的安装、核心概念 State状态代码实现 详细讲解_数据

一、Vuex 概述

目标:明确Vuex是什么,应用场景以及优势

1.是什么

Vuex 是一个 Vue 的 状态管理工具,状态就是数据。

大白话:Vuex 是一个插件,可以帮我们管理 Vue 通用的数据 (多组件共享的数据)。例如:购物车数据 个人信息数

2.使用场景

  • 某个状态 在 很多个组件 来使用 (个人信息)
  • 多个组件 共同维护 一份数据 (购物车)

【Vue2+3入门到实战】(18)VUE之Vuex状态管理器概述、VueX的安装、核心概念 State状态代码实现 详细讲解_vue.js_02

3.优势

  • 共同维护一份数据,数据集中化管理
  • 响应式变化
  • 操作简洁 (vuex提供了一些辅助函数)

【Vue2+3入门到实战】(18)VUE之Vuex状态管理器概述、VueX的安装、核心概念 State状态代码实现 详细讲解_javascript_03

4.注意:

官方原文:

  • 不是所有的场景都适用于vuex,只有在必要的时候才使用vuex
  • 使用了vuex之后,会附加更多的框架中的概念进来,增加了项目的复杂度 (数据的操作更便捷,数据的流动更清晰)

Vuex就像《近视眼镜》, 你自然会知道什么时候需要用它~

二、需求: 多组件共享数据

目标:基于脚手架创建项目,构建 vuex 多组件数据共享环境

【Vue2+3入门到实战】(18)VUE之Vuex状态管理器概述、VueX的安装、核心概念 State状态代码实现 详细讲解_前端_04

效果是三个组件共享一份数据:

  • 任意一个组件都可以修改数据
  • 三个组件的数据是同步的

1.创建项目

vue create vuex-demo

2.创建三个组件, 目录如下

|-components
|--Son1.vue
|--Son2.vue
|-App.vue

3.源代码如下

App.vue在入口组件中引入 Son1 和 Son2 这两个子组件

<template>
  <div id="app">
    <h1>根组件</h1>
    <input type="text">
    <Son1></Son1>
    <hr>
    <Son2></Son2>
  </div>
</template>

<script>
import Son1 from './components/Son1.vue'
import Son2 from './components/Son2.vue'

export default {
  name: 'app',
  data: function () {
    return {

    }
  },
  components: {
    Son1,
    Son2
  }
}
</script>

<style>
#app {
  width: 600px;
  margin: 20px auto;
  border: 3px solid #ccc;
  border-radius: 3px;
  padding: 10px;
}
</style>

main.js

import Vue from 'vue'
import App from './App.vue'

Vue.config.productionTip = false

new Vue({
  render: h => h(App)
}).$mount('#app')

Son1.vue

<template>
  <div class="box">
    <h2>Son1 子组件</h2>
    从vuex中获取的值: <label></label>
    <br>
    <button>值 + 1</button>
  </div>
</template>

<script>
export default {
  name: 'Son1Com'
}
</script>

<style lang="css" scoped>
.box{
  border: 3px solid #ccc;
  width: 400px;
  padding: 10px;
  margin: 20px;
}
h2 {
  margin-top: 10px;
}
</style>

Son2.vue

<template>
  <div class="box">
    <h2>Son2 子组件</h2>
    从vuex中获取的值:<label></label>
    <br />
    <button>值 - 1</button>
  </div>
</template>

<script>
export default {
  name: 'Son2Com'
}
</script>

<style lang="css" scoped>
.box {
  border: 3px solid #ccc;
  width: 400px;
  padding: 10px;
  margin: 20px;
}
h2 {
  margin-top: 10px;
}
</style>

三、vuex 的使用 - 创建仓库

【Vue2+3入门到实战】(18)VUE之Vuex状态管理器概述、VueX的安装、核心概念 State状态代码实现 详细讲解_Vue_05

1.安装 vuex

安装vuex与vue-router类似,vuex是一个独立存在的插件,如果脚手架初始化没有选 vuex,就需要额外安装。

yarn add vuex@3 或者 npm i vuex@3

2.新建 store/index.js 专门存放 vuex

为了维护项目目录的整洁,在src目录下新建一个store目录其下放置一个index.js文件。 (和 router/index.js 类似)


【Vue2+3入门到实战】(18)VUE之Vuex状态管理器概述、VueX的安装、核心概念 State状态代码实现 详细讲解_数据_06

3.创建仓库 store/index.js

// 导入 vue
import Vue from 'vue'
// 导入 vuex
import Vuex from 'vuex'
// vuex也是vue的插件, 需要use一下, 进行插件的安装初始化
Vue.use(Vuex)

// 创建仓库 store
const store = new Vuex.Store()

// 导出仓库
export default store

4 在 main.js 中导入挂载到 Vue 实例上

import Vue from 'vue'
import App from './App.vue'
import store from './store'

Vue.config.productionTip = false

new Vue({
  render: h => h(App),
  store
}).$mount('#app')

此刻起, 就成功创建了一个 空仓库!!

5.测试打印Vuex

App.vue

created(){
  console.log(this.$store)
}

四、核心概念 - state 状态

1.目标

明确如何给仓库 提供 数据,如何 使用 仓库的数据

2.提供数据

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

打开项目中的store.js文件,在state对象中可以添加我们要共享的数据。

// 创建仓库 store
const store = new Vuex.Store({
  // state 状态, 即数据, 类似于vue组件中的data,
  // 区别:
  // 1.data 是组件自己的数据, 
  // 2.state 中的数据整个vue项目的组件都能访问到
  state: {
    count: 101
  }
})

3.访问Vuex中的数据

问题: 如何在组件中获取count?

  1. 通过$store直接访问 —> {{ $store.state.count }}
  2. 通过辅助函数mapState 映射计算属性 —> {{ count }}

4.通过$store访问的语法

获取 store:
 1.Vue模板中获取 this.$store
 2.js文件中获取 import 导入 store


模板中:     {{ $store.state.xxx }}
组件逻辑中:  this.$store.state.xxx
JS模块中:   store.state.xxx

5.代码实现

5.1模板中使用

组件中可以使用 $store 获取到vuex中的store对象实例,可通过state属性属性获取count, 如下

<h1>state的数据 - {{ $store.state.count }}</h1>
5.2组件逻辑中使用

将state属性定义在计算属性中 https://vuex.vuejs.org/zh/guide/state.html

<h1>state的数据 - {{ count }}</h1>

// 把state中数据,定义在组件内的计算属性中
  computed: {
    count () {
      return this.$store.state.count
    }
  }
5.3 js文件中使用
//main.js

import store from "@/store"

console.log(store.state.count)

每次都像这样一个个的提供计算属性, 太麻烦了,我们有没有简单的语法帮我们获取state中的值呢?


标签:VUE,管理器,18,state,vue,Vuex,组件,vuex,store
From: https://blog.51cto.com/u_12948819/9252764

相关文章

  • 【Vue2+3入门到实战】(21)认识Vue3、使用create-vue搭建Vue3项目、熟悉项目和关键文件
    目录一、认识Vue31.Vue2选项式APIvsVue3组合式API2.Vue3的优势二、使用create-vue搭建Vue3项目1.认识create-vue2.使用create-vue创建项目三、熟悉项目和关键文件四、总结一、认识Vue31.Vue2选项式APIvsVue3组合式API<script>exportdefault{data(){r......
  • 【Vue2+3入门到实战】(23)Vue3之组合式API - 父子通信、模版引用、provide和inject、Vue
    这里写自定义目录标题一、组合式API-父子通信1.父传子2.子传父二、组合式API-模版引用1.基本使用2.defineExpose三、组合式API-provide和inject1.作用和场景2.跨层传递普通数据3.跨层传递响应式数据4.跨层传递方法四、Vue3.3新特性-defineOptions五、Vue3.3新特性......
  • 关于echarts+vue频繁刷新的造成的内存增长问题
    前言关于解决echarts+ws多次数据刷新渲染,内存增长溢出的尝试。记录一下,便于下次使用有参考方法关闭echarts动画tooltip的动画设置为false。(echarts动画会缓存,通过快照可以看出)tooltip:{axisPointer:{animation:false,//很重要!},......
  • 【Vue】前端直接显示MySQL Datatime时间,显示为英文如何处理
    问题如图想让时间显示为自己想要的格式,可以自己编写一个函数constformatDate=(timestamp)=>{constdate=newDate(timestamp);constyear=date.getFullYear();constmonth=String(date.getMonth()+1).padStart(2,'0');constday=String(date.getDate......
  • The 2nd Universal Cup Stage 18: Dolgoprudny H
    题意大概是说求有所有有标号有根树及其黑白染色方案使得定义\(S_{x}\)为\(x\)和其儿子节点构成的集合,则\(S_{x}\)中的黑色节点个数要求不少于白色节点个数,且定义\(x\)的白色节点个数为\(cnt_{x}\),则其方案的贡献为\(\sum_{i=1}^{n}cnt_{i}!\)(原题意这里似乎说的非常抽......
  • GEC6818开发板Linux环境中telnet的搭载
    一、首先打开开发板的Linux①通过232串口通信线连接开发板打开②打开网络配置文件(/etc/init.d/rcS)[root@GEC6818/]#vi/etc/init.d/rcS③用vi打开文件,在文件里面添加如下命令:#启动eth0网卡,并设置IP为192.168.1.124/sb......
  • 五菱宝骏车机升级教程【嘟嘟桌面或ES文件管理器】
    文章来源:https://www.djww.net/607.html简介越来越多的汽车厂商自研车机系统,其实就是在原来安卓的基础上加入自己的元素,然后禁用某些功能从而实现禁止用户安装第三方app。因此有些用户想安装第三方app来满足自己的需求,例如实现车机carplay、hicar、carlink、carlife等等。此教程......
  • 基于SpringBoot+Vue的OA办公系统设计实现(源码+lw+部署文档+讲解等)
    (文章目录)前言:heartpulse:博主介绍:✌全网粉丝10W+,CSDN特邀作者、博客专家、CSDN新星计划导师、全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战✌:heartpulse:......
  • Vue 3 + TypeScript + Vite + Element-Plus + Router + Axios + Pinia项目搭建(内含完
    Vue3+TypeScript+Vite+Element-Plus+Router+Axios+Pinia项目搭建(内含完整架构)安装Vue3+ts+vitenpminitvite@latest选择y,新建项目名称,选择vue,选择vue-ts下载完成后执行以下命令行cd新建的项目名称npminpmrundev安装Element-Plusnpminstallelement-plus-......
  • Android平台RTMP推送|轻量级RTSP服务|GB28181设备接入模块之实时快照保存JPG还是PNG?
    JPG还是PNG?JPG和PNG是两种常见的图片文件格式,在压缩方式、图像质量、透明效果和可编辑性等方面存在显著差异。压缩方式:JPG是一种有损压缩格式,通过丢弃图像数据来减小文件大小,因此可能会损失一些图像细节和质量。而PNG使用的是无损压缩格式,它不会丢失任何原始图像数据,从而保持了图像......