vue、vuex状态管理、vuex的核心概念state状态

每一个 Vuex 应用的核心就是 store(仓库)。“store”基本上就是一个容器,它包含着你的应用中大部分的状态 (state)。Vuex 和单纯的全局对象有以下两点不同:

  1. Vuex 的状态存储是响应式的。当 Vue 组件从 store 中读取状态的时候,若 store 中的状态发生变化,那么相应的组件也会相应地得到高效更新。

  2. 你不能直接改变 store 中的状态。改变 store 中的状态的唯一途径就是显式地提交 (commit) mutation。这样使得我们可以方便地跟踪每一个状态的变化,从而让我们能够实现一些工具帮助我们更好地了解我们的应用。

vuex初步使用

1、安装vuex

口诀:“233”、“344”

数字分别对应,“vue版本,vue 路由版本、vuex 版本”。

所以这里了使用vuex3版本:

yarn add vuex@3

 

 2、创建仓库文件

 编写如下:

// 这个文件用于存放vuex的核心代码
import Vue from 'vue'
import Vuex from 'vuex'// 插件安装
Vue.use(Vuex)// 创建仓库
const store = new Vuex.Store()// 导出仓库,把仓库丢到main.js
export default store

 3、在main.js中导入

import Vue from 'vue'
import App from './App.vue'
import router from './router'
import store from '@/store/index'Vue.config.productionTip = falsenew Vue({router,render: h => h(App),store
}).$mount('#app')

 4、验证仓库是否被创建成功

    created () {console.log('222222')console.log(this.$store)},

控制台打印:

这个对象就是我们的仓库了



使用state仓库的数据

state是vuex的核心。

状态目标:明确如何给仓库提供数据。

如何使用仓库的数据?方式有两种:

1、通过store直接访问

步骤1:提供数据State

提供唯一的公共数据源,所有共享的数据都要统一放到 Store中的 State中存储。在 state对象中可以添加我们要共享的数据。

步骤2:获取数据:

示例:

1、在我们的vuex仓库中添加共享的数据

// 这个文件用于存放vuex的核心代码
import Vue from 'vue'
import Vuex from 'vuex'// 插件安装
Vue.use(Vuex)// 创建仓库
const store = new Vuex.Store({// 通过提供数据,这些数据被所有的组件共享state: {title: '公共的标题',count: 100}
})// 导出仓库,把仓库丢到main.js
export default store

2、在我们的页面中获取数据

  <h1>{{ $store.state.title }}</h1>

2、通过辅助函数访问

简化mapstate是辅助函数,帮助我们把 store中的数据自动映射到组件的计算属性中。

 

步骤1:

  import { mapState } from 'vuex'// console.log(mapState(['count','title']))// 我们可以在计算属性中展开mapState

步骤2:

    computed: {...mapState(['count', 'title'])},

步骤3:

我们可以像使用vue的data中的数据一样,去使用计算属性中的变量。

   <h1>{{ title }}</h1>

 

 3、严格模式

明确νuex同样遵循单向数据流,组件中不能直接修改仓库的数据通过 strict:true可以开启严格模式

// 创建仓库
const store = new Vuex.Store({// 严格模式: 如果每个组件都可以修改数据,一旦项目打了,开发人员多了,就很难维护了// 可以使用严格模式来让vuex修改数据,修改后,vuex在通知我们的组件,更新数据。// 有利于初学者,检测不规范的代码=>上线时需要关闭strict: true,// 通过提供数据,这些数据被所有的组件共享state: {title: '公共的标题',count: 100}
})

 4  mutations的操作流程

state数据的修改只能通过 mutations。

1、仓库index.js

const store = new Vuex.Store({strict: true,state: {title: '公共的标题',count: 100},mutations: {// 所有 mutation函数,第一个参数,都是 stateaddCount (state) {state.count += 1}}
})

 2、在页面中使用我们的mutations

      handleAddCount(){this.$store.commit('addCount')}
     <button @click="handleAddCount">值 + 1</button>

 

5  mutations传参语法

需要注意的是,如果要传递多个参数,我们需要把多个参数丢到对象当中,像传递一个参数一样,把对象传递给我们定义的mutations函数 。

6  辅助函数: mapmutations

目标:掌握辅助函数 mapmutations,映射方法mapmutations和 mapstate很像,它是把位于 mutations中的方法提取了出来,映射到组件 methods中

mapmutations相当于3.1的辅助写法,只是把方法捞到了methods当中了。

7 actions (异步操作)

目标:明确 actions的基本语法,处理异步操作,

需求:一秒钟之后,修改 state的 count成666。

说明: mutations必须是同步的(便于监测数据变化,记录调试。

 步骤1:修改仓库index.js

  mutations: {changeTitle (state, newTitle) {state.title = newTitle}},
  // 3.actions 处理异步// context上下文(此处未分模块,可以当成 store仓库)//  context, commit(" mutation名字,额外参数)actions: {asynChangeTitle (context, newTitle) {// setTimeout方法是异步的,3秒钟之后换成我们的新标题setTimeout(()=>{context.commit('changeTitle',newTitle)},3000)}}

这里,actions是mutations的同级对象。

步骤2: 测试

    <button @click="handleChangeTitle">3秒之换标题</button>
    methods: {handleChangeTitle () {// 调用action//this.$store.dispatch('我们vuex仓库中的action的名字','额外参数')this.$store.dispatch('asynChangeTitle','这是3秒钟之后的新标题')}},

 

总结:和前面的“mutations传参语法”目录类似,只是多了actions这个中间人 ,this.$store.commi换成了this.$store.dispatch。

8 getters

getters类似于计算属性。说明:除了 state之外,有时我们还需要从 state中派生出一些状态,这些状态是依赖 state的,此时会用到 getters。

例如: statel中定义了list,为1-6的数组,组件中,需要显示所有大于3的数据

步骤1:

getters和state同级

  getters: {filterList (state) {return state.list.filter(item => item > 3)}},

步骤2:

在组件内使用:

  import { mapState,mapGetters } from 'vuex'
    computed: {//mapState和mapGetters都是映射属性...mapState(['count', 'title']),...mapGetters(['filterList'])},

9 模块 module(进阶语法)

9.1 获取module的数据

项目大,代码就多了,store的文件内存上千行代码,很难维护,不易管理。

module的存在就是为了解决这个问题的。

步骤1:

在store目录下建一个新目录modules,在modules下建两个js文件,user.js,setting.js,如下:

// setting.js
const state = {theme: 'blue',desc: 'deom'
}
const mutations = {}const actions = {}const getters = {}export default {state,mutations,actions,getters
}
// user.js
const state = {name: 'Mike',hobby: '唱、跳、Rap'
}
const mutations = {}const actions = {}const getters = {}export default {state,mutations,actions,getters
}

步骤2、把user.js,setting.js导入到store目录下的index.js文件中:

import settings from './modules/settings'
import user from './modules/user'

 mudules对象和state对象同级:

  modules:{settings,user}

步骤3 使用modules下的数据:

modules的子模块的状态,还是会挂到根级别的 state使用模块中的数据

①直接通过模块名访问$ store. state模块名.XXX

②通过 mapstate映射

默认根级别的映射 mapstate(['XXX'])子模块的映射 mapstate('模块名',['XXX']) -

需要开启命名空间

export default {state,mutations,actions,getters,namespaced:true
}
 ①直接通过模块名访问$store.state.模块名.XXX
     <span>爱好: {{ $store.state.user.hobby }}</span>

②通过mapstate映射
  <span>(mapState)爱好: {{ user.hobby }}</span>
    computed: {//mapState和mapGetters都是映射属性...mapState(['count', 'title','settings','user']),...mapGetters(['filterList'])},

 9.2 修改module模块下的数据

步骤1、定义mutaion

const mutations = {setUserInfo(state,newHobby){state.hobby = newHobby}
}
    methods: {updateUserInfo () {// this.$store.commit('模块名/mutation名',参数)this.$store.commit('user/setUserInfo','唱、跳、Rap、Smile')}},
        <button @click="updateUserInfo"> 修改爱好信息 </button><span>爱好: {{ user.hobby }}</span>

 点击按钮前:

 点击按钮后的页面:

 

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

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

相关文章

数据结构--Trie字符串统计

1、“Trie树” 作用&#xff1a; 高效地存储和查找字符串集合的数据结构。 2、“Trie树” 存储字符串的形式如下&#xff1a; 用 “0” 来表示 “根节点&#xff08;root&#xff09;”。存入一个字符串时&#xff0c;会在字符串最后结尾的那个字符节点打上标记。比如&#x…

Python柱形图

柱形图 柱形图&#xff0c;又称长条图、柱状统计图、条图、条状图、棒形图&#xff0c;是一种以长方形的长度为变量的统计图表。长条图用来比较两个或以上的价值&#xff08;不同时间或者不同条件&#xff09;&#xff0c;只有一个变量&#xff0c;通常利用于较小的数据集分析…

投资理财:利率下行时代应该怎样存钱?

大家好&#xff0c;我是财富智星&#xff0c;今天跟大家分享一下当下利率下行的时代&#xff0c;钱应该怎样存&#xff0c;存哪里的问题。 一、 银行利率下行 在过去的三十年里&#xff0c;您已经逐渐适应了不断下降的利率&#xff0c;从10%到现在的1.65%。而在未来&#xff0c…

迄今为止丨ChatGPT最强指令,一个可以让机器人生成机器人的Prompt,价值百万!

原文&#xff1a; 【ChatGPT调教】ChatGPT最强指令、让机器人为你生成机器人&#xff01;-CSDN博客 说明&#xff1a;最好看原文 昨天&#xff0c;发现了一条可能是迄今为止&#xff0c;我见过最牛的&#xff0c;商业价值最高的ChatGPT指令。 通过这条指令&#xff0c;可以…

1400*C. Soldier and Cards(贪心模拟)

Problem - 546C - Codeforces Soldier and Cards - 洛谷 解析&#xff1a; 模拟即可&#xff0c;当循环次数过大的时候跳出循环打印 -1 #include<bits/stdc.h> using namespace std; #define int long long const int N2e55; int n,x,k1,k2,cnt; queue<int>a,b;…

[黑马程序员TypeScript笔记]------一篇就够了

目录&#xff1a; TypeScript 介绍 TypeScript 是什么&#xff1f;TypeScript 为什么要为 JS 添加类型支持&#xff1f;TypeScript 相比 JS 的优势TypeScript 初体验 安装编译 TS 的工具包 编译并运行 TS 代码 简化运行 TS 的步骤 TypeScript 常用类型 概述类型注解常用基础…

MATLAB算法实战应用案例精讲-【优化算法】沙丁鱼优化算法(SOA)(附MATLAB代码实现)

前言 沙丁鱼优化算法(Sardine optimization algorithm,SOA)由Zhang HongGuang等人于2023年提出,该算法模拟沙丁鱼的生存策略,具有搜索能力强,求解精度高等特点。 沙丁鱼主要以浮游生物为食,这些生物包括细菌、腔肠动物、软体动物、原生动物、十足目、幼小藤壶、鱼卵、甲藻…

LeetCode 面试题 08.02. 迷路的机器人

文章目录 一、题目二、C# 题解 一、题目 设想有个机器人坐在一个网格的左上角&#xff0c;网格 r 行 c 列。机器人只能向下或向右移动&#xff0c;但不能走到一些被禁止的网格&#xff08;有障碍物&#xff09;。设计一种算法&#xff0c;寻找机器人从左上角移动到右下角的路径…

【C++设计模式之建造者模式:创建型】分析及示例

简介 建造者模式&#xff08;Builder Pattern&#xff09;是一种创建型设计模式&#xff0c;它将复杂对象的构建过程与其表示分离&#xff0c;使得同样的构建过程可以创建不同的表示。 描述 建造者模式通过将一个复杂对象的构建过程拆分成多个简单的部分&#xff0c;并由不同…

OpenGLES:绘制一个混色旋转的3D圆柱

效果展示 本篇博文会实现两种混色效果的3D圆柱&#xff1a; 一.圆柱体解析 上一篇博文讲解了怎么绘制一个混色旋转的立方体 这一篇讲解怎么绘制一个混色旋转的圆柱 圆柱的顶点创建主要基于2D圆进行扩展&#xff0c;与立方体没有相似之处 圆柱绘制的关键点就是将圆柱拆解成…

【TensorFlow Hub】:有 100 个预训练模型等你用

要访问TensorFlow Hub&#xff0c;请单击此处 — https://www.tensorflow.org/hub 一、说明 TensorFlow Hub是一个库&#xff0c;用于在TensorFlow中发布&#xff0c;发现和使用可重用模型。它提供了一种使用预训练模型执行各种任务&#xff08;如图像分类、文本分析等&#xf…

Docker 配置基础优化

Author&#xff1a;rab 为什么要优化&#xff1f; 你有没有发现&#xff0c;Docker 作为线上环境使用时&#xff0c;Docker 日志驱动程序的日志、存储驱动数据都比较大&#xff08;尤其是在你容器需要增删比较频繁的时候&#xff09;&#xff0c;动不动就好几百 G 的大小&…

节日灯饰灯串灯出口欧洲CE认证办理

灯串&#xff08;灯带&#xff09;&#xff0c;这个产品的形状就象一根带子一样&#xff0c;再加上产品的主要原件就是LED&#xff0c;因此叫做灯串或者灯带。2022年&#xff0c;我国灯具及相关配件产品出口总额超过460亿美元。其中北美是最大的出口市场。其次是欧洲市场&#…

【STM32 LVGL基础教程】初识LVGL

文章目录 前言一、什么是LVGL&#xff1f;二、LVGL的诞生历程三、LVGL的用途四、模拟器使用LVGL4.1 下载codeblocks并运行模拟器lvgl4.2 更改lvgl设置更改帧数更改颜色深度 五、STM32使用LVGL总结 前言 嵌入式系统中的图形用户界面&#xff08;GUI&#xff09;已经成为现代设备…

基于goravel的CMS,企业官网通用golang后台管理系统

2023年9月11日10:47:00 仓库地址&#xff1a; https://gitee.com/open-php/zx-goravel-website 框架介绍 Goravel SCUI 后端开发组件 go 1.20 Goravel 1.13 数据库 sql(使用最新日期文件) goravel\doc\sql_bak mysql 8.0 前端开发组件 scui 1.6.9 node v14.21.3 效果图…

基于自私羊群优化的BP神经网络(分类应用) - 附代码

基于自私羊群优化的BP神经网络&#xff08;分类应用&#xff09; - 附代码 文章目录 基于自私羊群优化的BP神经网络&#xff08;分类应用&#xff09; - 附代码1.鸢尾花iris数据介绍2.数据集整理3.自私羊群优化BP神经网络3.1 BP神经网络参数设置3.2 自私羊群算法应用 4.测试结果…

uni-app实现图片预览

uni.previewImage预览图片 使用方法&#xff1a; <image class"poster" :src"imageUrl" mode"" click"previewImg(imageUrl)"></image>const previewImg (e) > {uni.previewImage({current: e,urls: image}); } 官…

vulnhub靶机doubletrouble

下载地址&#xff1a;doubletrouble: 1 ~ VulnHub 主机发现 arp-scan -l 端口扫描 nmap --min-rate 1000 -p- 192.168.21.151 端口服务扫描 nmap -sV -sT -O -p22,80 192.168.21.151 漏洞扫描 nmap --scriptvuln -p22,80 192.168.21.151 先去看看web页面 这里使用的是qdpm …

提升您的 Go 应用性能的 6 种方法

优化您的 Go 应用程序 1. 如果您的应用程序在 Kubernetes 中运行&#xff0c;请自动设置 GOMAXPROCS 以匹配 Linux 容器的 CPU 配额 Go 调度器 可以具有与运行设备的核心数量一样多的线程。由于我们的应用程序在 Kubernetes 环境中的节点上运行&#xff0c;当我们的 Go 应用程…

探秘布隆过滤器:高效数据查找与去重利器

探秘布隆过滤器&#xff1a;高效数据查找与去重利器 引言 在现代计算机科学中&#xff0c;数据的查找与去重是一个至关重要的问题。本文将介绍一种高效的数据结构——布隆过滤器&#xff0c;它能够在海量数据中快速判断某个元素是否存在&#xff0c;同时具有出色的空间效率。…