vuex--未完

一、 简介

vue3.0以上,本文是3.0
vue2.0
Vuex 是一个专为 Vue.js 应用程序开发的状态管理模式 + 库(全局管理,相当于一个全局变量,所有页面共享)。它采用集中式存储管理应用的所有组件的状态,并以相应的规则保证状态以一种可预测的方式发生变化。

二、使用介绍

namespace介绍
模块可能会有很多个,公用的一套state、getters、mutations、actions,若想封装更强单独使用,需要加上namespaced:true

注意:namespaced:true, 使用模块中的mutations、getters、actions时候,要加上模块名(uInfo注册时的模块名)
》》 调用方法的时候:store.commit(“uInfo/方法名”,data.userLoginInfo)
》》获取属性的时候:store.state.uInfo.属性名

1 、Vuex使用样例包含 state、getters、mutations、actions使用

  • 第一步:引入 在main.js 中–生成项目是已经做好

    //vuex
    import store from './store'
    createApp(App).use(store)
    
  • 第二步:在store文件夹下的index.js中
    Promise介绍

    import { createStore } from 'vuex'export default createStore({//全局状态初始值state: {count:1},//计算state,获取对应的值getters: {countStatus(state){return state.count <= 1}},//更新状态的方法--更新state的唯一方法,commit mutationsmutations: {setCount(state,num){state.count=num;}},//可以异步操作,可以返回promise,更改数据还是传递到 mutations 去更改actions: {setCountPromise(context,num){//包含store的上下文对象//Promise的构造函数接收一个参数,是函数,并且传入两个参数:resolve,reject,分别表示异步操作执行成功后的回调函数和异步操作执行失败后的回调函数。//Promise就是能把原来的回调写法分离出来,在异步操作执行完后,用链式调用的方式执行回调函数。//resolve执行成功时的回调;reject执行失败时的回调return new Promise((resolve, reject) => {if(num >100){reject("不能大于100")}else{context.commit("setCount",num)resolve()}})}},//数据较多时,分模块modules: {}
    })
  • 第三步:vue页面代码

    <template><p>{{num}}</p><el-button type="primary" @click="handle">提交</el-button>
    </template>
    <script>import {reactive,toRefs} from "vue"import { useStore} from "vuex"export default {name:"user",setup(){const store =useStore()const count = store.state.countconst data = reactive({num:count,})console.log("修改前的getters",store.getters.countStatus)const handle=()=>{//测试mutations中的setCount//store.commit("setCount",100)//测试actions中的setCountPromise--异步store.dispatch("setCountPromise",100).then(res=>{alert("修改成功")}).catch(err=>{alert(err)});console.log(store.state.count)console.log("修改后的getters",store.getters.countStatus)}return{...toRefs(data),handle}}}
    </script>
    

2、modules分模块

  • 第一步:在store文件夹下,建立sate,里面包含多个js文件,一个js代表一个模块

    例子:num.state.js,多了namespaced,缺少modules,其他的state、getters、mutations、actions和index中的一样

    export default {//防止模块名字相同namespaced:true,//全局状态初始值state: {count:1},//计算state,获取对应的值getters: {countStatus(state){return state.count <= 1}},//更新状态的方法--更新state的唯一方法,commit mutationsmutations: {setCount(state,num){state.count=num;}},//可以异步操作,可以返回promise,更改数据还是传递到 mutations 去更改actions: {setCountPromise(context,num){//包含store的上下文对象//Promise的构造函数接收一个参数,是函数,并且传入两个参数:resolve,reject,分别表示异步操作执行成功后的回调函数和异步操作执行失败后的回调函数。//Promise就是能把原来的回调写法分离出来,在异步操作执行完后,用链式调用的方式执行回调函数。//resolve执行成功时的回调;reject执行失败时的回调return new Promise((resolve, reject) => {if(num >100){reject("不能大于100")}else{context.commit("setCount",num)resolve()}})}}
    }
    
  • 第二步:将index.js中的state、getters、mutations、actions代码删除,需要引入注册mutations

    import { createStore } from 'vuex'
    //引入state模块
    import number from "../store/state/num.state.js"
    export default createStore({//数据较多时,分模块modules: {number//注册state模块}
    })
  • 第三步:vue页面需要相应的更改

    <template><div>用户列表aaa</div><p>{{num}}</p><el-button type="primary" @click="handle">提交</el-button>
    </template>
    <script>import {reactive,toRefs} from "vue"import { useStore} from "vuex"export default {name:"user",setup(){const store =useStore()const count = store.state.number.countconst data = reactive({num:count,})//store.getters.countStatus改成现在这样否则会报语法错误console.log("修改前的getters",store.getters["number/countStatus"])const handle=()=>{//调用mutations中的setCount方法//store.commit("number/setCount",100)store.dispatch("number/setCountPromise",100).then(res=>{alert("修改成功")}).catch(err=>{alert(err)});console.log(store.state.number.count)console.log("修改后的getters",store.getters["number/countStatus"])}return{...toRefs(data),handle}}}
    </script>
    

三、核心概念

1、state

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

  • Vuex 的状态存储是响应式的。当 Vue 组件从 store 中读取状态的时候,若 store 中的状态发生变化,那么相应的组件也会相应地得到高效更新。
  • 你不能直接改变 store 中的状态。改变 store 中的状态的唯一途径就是显式地提交 (commit)
    mutation。这样使得我们可以方便地跟踪每一个状态的变化,从而让我们能够实现一些工具帮助我们更好地了解我们的应用。

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

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

相关文章

elementui中的el-table,当使用fixed属性时,table主体会遮挡住滚动条的大半部分,导致很难选中。

情况&#xff1a; 解决&#xff1a; el-table加个类&#xff0c;这里取为class"table" 然后是样式部分&#xff1a; <style scoped lang"scss"> ::v-deep.table {// 滚动条高度调整::-webkit-scrollbar {height: 15px;}// pointer-events 的基本信…

处理HTTP响应状态码和错误处理

在Web开发的世界里&#xff0c;HTTP响应状态码和错误处理是不可或缺的一部分。它们就像是道路上的交通信号灯&#xff0c;指导着我们前进的方向&#xff0c;确保我们的应用程序能够正常运行。 HTTP响应状态码是Web服务器返回给客户端的数字代码&#xff0c;用于表示请求的处理…

以编程方式向 App 设计工具添加 UI 组件

App 设计工具组件库中提供了大多数 UI 组件&#xff0c;可以将它们拖放到画布上。有时&#xff0c;可能需要在代码视图中以编程方式添加组件。以下是一些常见情况&#xff1a; 创建在组件库中未提供的组件。例如&#xff0c;用于显示某对话框的 App 必须调用适当的函数来显示该…

Volta简单介绍

Volta是一款强大的JavaScript工具管理器&#xff0c;它简化了命令行工具的安装和管理。通过Volta&#xff0c;开发者可以轻松地在多个项目中切换和配置Node.js、npm以及其它JavaScript工具版本&#xff0c;提高开发效率和环境一致性。 什么是 Volta Volta 是一种管理 JavaScri…

数据之门:使用IPIDEA开启网络自由之旅~

本文目录 前言一、网络代理IP简介二、IPIDEA 优势2.1 多种类型IP代理2.2 海量纯净代理池2.3 稳定高效数据收集架构2.4 个人IP管理中心 三、IP代理实操小Tips3.1 查看本地网络IP3.2 使用浏览器IP代理3.3 使用IPIDEA进行爬虫实操 四、总结 前言 各位友友&#xff0c;大家好&…

ASP.NET MVC+EntityFramework图片头像上传

1&#xff0c;先展示一下整体的效果 2&#xff0c;接下来展示用户添加以及上传头像代码、添加用户界面 前端代码如下&#xff1a; <div class"form-group">Html.LabelFor(model > model.img, "头像&#xff1a;", htmlAttributes: new { class &…

【LeetCode】344.反转字符串

今日学习的文章链接和视频链接 leetcode题目地址&#xff1a;344.反转字符串 代码随想录题解地址&#xff1a;代码随想录 题目简介 编写一个函数&#xff0c;其作用是将输入的字符串反转过来。输入字符串以字符数组 s 的形式给出。 不要给另外的数组分配额外的空间&#xf…

【计算机组成与体系结构Ⅱ】多处理器部分讨论题目

多处理机课堂讨论 1.并行计算体系结构有哪些? SIMD、MIMD 2.多处理机的存储结构有哪些? 对称式共享存储器结构、分布式共享存储结构 3.什么是多处理机的一致性? 如果对某个数据项的任何读操作均可得到其最新写入的值&#xff0c;则认为这个存储系统是一致的。 4.监听协议的工…

easyexcel调用公共导出方法导出数据

easyexcel备忘 Slf4j public class ConditionDownloadUtil {//扫描在xboot 包下所有IService 接口的子类, 每次启动服务后, 重新扫描public final static Class[] classesExtendsIService ClassUtil.scanPackageBySuper("cn.exrick.xboot", IService.class).toArra…

UCloud + 宝塔 + PHP = 个人网站

UCloud 宝塔 PHP 个人网站 文章目录 1.概要2.UCloud使用教程&#xff08;租用云端服务器&#xff09;3.宝塔使用教程&#xff08;免费服务器运维面板&#xff09;4.总结 1.概要 今天主要是想教大家如何将在网络上白嫖到源码&#xff08;特指PHP源码!!!&#xff09;搭建运行…

uni-app 用于开发H5项目展示饼图,使用ucharts 饼图示例

先下载ucharts H5示例源码&#xff1a; uCharts: 高性能跨平台图表库&#xff0c;支持H5、APP、小程序&#xff08;微信小程序、支付宝小程序、钉钉小程序、百度小程序、头条小程序、QQ小程序、快手小程序、360小程序&#xff09;、Vue、Taro等更多支持canvas的框架平台&#…

使用bs4 分析html文件

首先需要 pip install beautifulsoup4安装 然后为了方便学习此插件&#xff0c;随便打开一个网页&#xff0c;然后鼠标右键&#xff0c;打开源网页&#xff0c;如下图片 这样就可以获得一个网页源码&#xff0c;全选复制粘贴到本地&#xff0c;存储为 .html 文件&#xff0c;…

WebLangChain_ChatGLM:结合 WebLangChain 和 ChatGLM3 的中文 RAG 系统

WebLangChain_ChatGLM 介绍 本文将详细介绍基于网络检索信息的检索增强生成系统&#xff0c;即 WebLangChain。通过整合 LangChain&#xff0c;成功将大型语言模型与最受欢迎的外部知识库之一——互联网紧密结合。鉴于中文社区中大型语言模型的蓬勃发展&#xff0c;有许多可供利…

自封组件-带边框的渐变色数据卡片

<template> <el-row :gutter"10"><el-col :span"8"><div class"dplay_green"><div class"dplay_num_green">{{ jhdl }}</div><div class"dplay_text_green">提示文字</div>…

计算机网络——数据链路层-可靠传输的实现机制:选择重传协议SR(介绍、工作原理、窗口尺寸、题目练习)

目录 选择重传协议SR 介绍 工作原理 窗口尺寸 练习 题目 答案 解析 示意图 选择重传协议SR 介绍 在上篇中&#xff0c;我们介绍了回退N帧协议。回退N帧协议的接收窗口尺寸只能等于一&#xff0c;因此接收方只能按序接收正确到达的数据分组&#xff1b;一个数据分组…

动态规划 - 509.斐波那契数(C#和C实现)

动态规划 - 509.斐波那契数(C#和C实现) 题目描述 斐波那契数&#xff0c;通常用 F(n) 表示&#xff0c;形成的序列称为斐波那契数列。该数列由 0 和 1 开始&#xff0c;后面的每一项数字都是前面两项数字的和。也就是&#xff1a; F(0) 0&#xff0c;F(1) 1 F(n) F(n - 1…

宣布推出 ML.NET 3.0

作者&#xff1a;Jeff Handley 排版&#xff1a;Alan Wang ML.NET 是面向 .NET 开发人员的开源、跨平台的机器学习框架&#xff0c;可将自定义机器学习模型集成到 .NET 应用程序中。ML.NET 3.0 版本现已发布&#xff0c;其中包含大量新功能和增强功能&#xff01; 此版本中的深…

零刻EQ12 N100 双2.5G网口 All In One新手教程

零刻EQ12 N100 双2.5G网口 All In One新手教程 前言1.硬件配置2.准备工作2.1. ESXI8.0U2镜像2.2. Rufus磁盘工具下载2.3. ikuai镜像下载2.4. StarWindConverter虚拟磁盘格式转换工具下载2.5. OpenWrt镜像下载2.6. 黑群晖RR引导镜像下载(DSM7.2)2.7. 需要准备的硬件2.8. 格式化需…

kafka offset sasl加密连接

kafka-tool&#xff08;offset&#xff09; 进行SCRAM连接&#xff0c;直接上图 填写jaas的认证&#xff08;账密 引用包&#xff09;

图片曝光修正方法(直方图均衡和CNN)

图像过曝或曝光不足时需要曝光处理&#xff0c; 这里以曝光不足举例。 直方图均衡法&#xff1a; 通过RGB通道的直方图均衡达到处理曝光不足的效果。 代码&#xff1a; underexpose cv2.imread("exposure_test.jpg") #underexpose cv2.cvtColor(underexpose, cv2…