vue3-vuex

一、概念

(1)Vuex 是一个状态和数据管理的框架,负责管理项目中多个组件和多个页面共享的数据。

 (2)在开发项目的时候,我们就会把数据分成两个部分,一种数据是在某个组件内部使用,我们使用 ref 或者 reactive 定义即可,另外一种数据需要跨页面共享,就需要使用Vuex 来进行管理

(3)Vuex使用 state 定义数据,使用mutation定义修改数据的逻辑,并且在组件中使用 commit 去调用 mutations。在此基础之上,还可以用 getters 去实现 Vuex 世界的计算属性,使用 action 来去定义异步任务,并且在内部调用 mutation 去同步数据。

(3) Vuex 在整体上的逻辑如下图所示,从宏观来说,Vue 的组件负责渲染页面,组件中用到跨页面的数据,就是用 state 来存储,但是 Vue 不能直接修改 state,而是要通过 actions/mutations 去做数据的修改。

 

二、手写迷你Vuex

(1)在 Vue 中有provide/inject 这两个函数专门用来做数据共享,provide 注册了数据后,所有的子组件都可以通过 inject 获取数据。

(2)使用一个 Store 类来管理数据,类的内部使用 _state 存储数据,使用mutations 来存储数据修改的函数,注意这里的 state 已经使用 reactive 包裹成响应式数据了。

(3)暴露了 createStore 去创建 Store 的实例。

(4)暴露了 useStore 去获取 Store 的实例。

(5)使用 store ,在项目入口文件 src/main.js 中使用 app.use(store) 注册。为了让 useStore 能正常工作,下面的代码中,需要给 store 新增一个 install 方法,这个方法会在 app.use 函数内部执行。通过 app.provide 函数注册 store 给全局的组件使用。

(6)Store 类内部变量 _state 存储响应式数据,读取 state 的时候直接获取响应式数据 _state.data,并且提供了 commit 函数去执行用户配置好的 mutations。

import { inject, reactive } from "vue";
const STORE_KEY = "__store__";
function useStore() {return inject(STORE_KEY);
}
function createStore(options) {return new Store(options);
}
class Store {constructor(options) {this._state = reactive({data: options.state(),});this._mutations = options.mutations;}// main.js入口处app.use(store)的时候,会执行这个函数install(app) {app.provide(STORE_KEY, this);}get state() {return this._state.data;}commit = (type, payload) => {const entry = this._mutations[type];entry && entry(this.state, payload);};
}
export { createStore, useStore };

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

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

相关文章

【C++】STL案例1-评委打分

0.前言 1.系统自动生成的评委评分代码&#xff1a; #include <iostream> using namespace std; #include <deque> #include <vector> #include <algorithm> #include <string>//选手类 class Player { public:Player(string name, float score)…

机器学习深度学习——机器翻译(序列生成策略)

&#x1f468;‍&#x1f393;作者简介&#xff1a;一位即将上大四&#xff0c;正专攻机器学习的保研er &#x1f30c;上期文章&#xff1a;机器学习&&深度学习——seq2seq实现机器翻译&#xff08;详细实现与原理推导&#xff09; &#x1f4da;订阅专栏&#xff1a;机…

ClickHouse常见的DDL语句

1.创建库 CREATE DATABASE IF NOT EXISTS mytestdb; 2.创建表 CREATE TABLE user_info ( user_id UInt32 comment 用户标识, name String comment 用户名, create_date DateTime DEFAULT now() comment 创建时间, sex Enum8(男 1, 女 2) comment 性别, …

最新AI系统ChatGPT网站程序源码+搭建教程/公众号/H5端/安装配置教程/完整知识库

1、前言 SparkAi系统是基于国外很火的ChatGPT进行开发的Ai智能问答系统。本期针对源码系统整体测试下来非常完美&#xff0c;可以说SparkAi是目前国内一款的ChatGPT对接OpenAI软件系统。 那么如何搭建部署AI创作ChatGPT&#xff1f;小编这里写一个详细图文教程吧&#xff01;…

基于IDE Eval Resetter延长IntelliJ IDEA等软件试用期的方法(包含新版本软件的操作方法)

本文介绍基于IDE Eval Resetter插件&#xff0c;对集成开发环境IntelliJ IDEA等JetBrains公司下属的多个开发软件&#xff0c;加以试用期延长的方法。 我们这里就以IntelliJ IDEA为例&#xff0c;来介绍这一插件发挥作用的具体方式。不过&#xff0c;需要说明使用IDE Eval Rese…

docker常用指令

一、Docker指令 1、启动Docker &#xff1a;systemctl start docker 2、查看Docker状态:systemctl status docker 状态为active表示正在运行中 3、停止运行Docker:systemctl stop docker 4、重启Docker:systemctl restart docker 5、开机启动Docker:systemctl enable docker 二…

Apache Hudi Timeline Server介绍

文章目录 Apache Hudi Timeline Server介绍1. 概述2 提供的服务3. 结论 Apache Hudi Timeline Server介绍 1. 概述 Hudi 有一个中央时间线服务器&#xff0c;在驱动程序节点中运行并作为 Rest 服务。它有多种好处&#xff0c;第一个用例是提供 FileSystemView api。Hudi 的核…

Hlang社区-社区主页实现

文章目录 前言首页结构固定导航栏左侧导航itemitem标志头部推荐文章展示ITEM实现ToolTip完整实现首页完整实现前言 废话不多说,直接看到效果,这里的话是我们社区主页,不是产品宣传主页哈: 是的也许你已经发现了这个页面和某个网站长得贼像。没错是这样的,这个布局我确实…

vue3+vite+pinia

目录 一、项目准备 1.1、Vite搭建项目 1.2、vue_cli创建项目 二、组合式API(基于setup) 2.1、ref 2.2、reactive 2.3、toRefs 2.4、watch和watchEffect 2.5、computed 2.6、生命周期钩子函数 2.7、setup(子组件)的第一个参数-props 2.8、setup(子组件)的第二个参数…

STM32 CubeMX (Freertos任务:创建、删除、挂起、恢复)

STM32 CubeMX Freertos STM32 CubeMX &#xff08;Freertos任务&#xff1a;创建、删除、挂起、恢复&#xff09; STM32 CubeMX Freertos前言一、STM32 CubeMX 配置时钟树配置使能串口&#xff0c;用于用于检查实验现象使用STM32 CubeMX 库&#xff0c;配置Freertos创建任务 二…

云计算:新一代的技术革命

云计算&#xff0c;作为21世纪的一项重要技术革命&#xff0c;已在全球范围内引发了深远的影响。它改变了我们存储和处理数据的方式&#xff0c;使得企业无需再建设和维护昂贵的本地服务器和数据中心。本文将深入探讨云计算的基本概念&#xff0c;类型&#xff0c;主要优点&…

开发利器:接口代理和接口模拟工具

前端开发过程往往需要和后端对接接口,而且一般开发都是前后端同步开发,这就难免出现接口提供滞后的问题,从而导致我们前端开发 UI 开发完成而无法调试的问题。面对这种问题,一般我们会有很多种方式处理,比如在代码中写一些模拟数据,或者打断点调试,或者用代理工具 Fidde…

概念解析 | 长尾分布:从无处不在的‘少数派’中挖掘价值

注1:本文系“概念解析”系列之一,致力于简洁清晰地解释、辨析复杂而专业的概念。本次辨析的概念是:长尾分布(Long-Tail Distribution)。 揭秘长尾分布:从无处不在的‘少数派’中挖掘价值 What is a Long Tail Distribution? (Definition & Example) - Statology 一、背…

神经网络基础-神经网络补充概念-02-逻辑回归

概念 逻辑回归是一种用于二分分类问题的统计学习方法&#xff0c;尽管名字中带有"回归"一词&#xff0c;但实际上它用于分类任务。逻辑回归的目标是根据输入特征来预测数据点属于某个类别的概率&#xff0c;然后将概率映射到一个离散的类别标签。 逻辑回归模型的核…

什么叫做云计算?

相信大多数人对云计算或者是云服务的认识还停留在仅仅听过这个名词&#xff0c;但是对其真正的定义或者意义还不甚了解的层面。甚至有些技术人员&#xff0c;如果日常的业务不涉及到云服务&#xff0c;可能对其也只是一知半解的程度。首先云计算准确的讲只是云服务中的一部分&a…

多主题自适应知识变现博客论坛,支持docker一键部署

iblog 给大家推荐一个多主题自适应&#xff0c;支持付费收款的博客论坛系统&#xff0c;支持docker一键部署&#xff0c;支持企业微信通知。 前端 多主题 自适应 个人页 后端 H2 console 运行命令 docker run -d --name iblog --restartalways -p 8080:8080 -e consoletrue …

RabbitMQ简单使用

RabbitMq是一个消息中间件&#xff1a;它接收消息、转发消息。你可以把它理解为一个邮局&#xff1a;当你向邮箱里寄出一封信后&#xff0c;邮递员们就能最终将信送到收信人手中。 RabbitMq、消息相关术语如下&#xff1a; 生产者&#xff1a;生产者只发送消息&#xff0c;发…

Postman接口自动化测试实例

一.实例背景 在实际业务中&#xff0c;经常会出现让用户输入用户密码进行验证的场景。而为了安全&#xff0c;一般都会先请求后台服务器获取一个随机数做为盐值&#xff0c;然后将盐值和用户输入的密码通过前端的加密算法生成加密后串传给后台服务器&#xff0c;后台服务器接到…

【ARM 嵌入式 编译系列 11 -- GCC __attribute__((packed))详细介绍】

文章目录 __attribute__&#xff08;(packed)&#xff09; 介绍 上篇文章&#xff1a;ARM 嵌入式 编译系列 10.3 – GNU elfutils 工具小结 下篇文章&#xff1a;ARM 嵌入式 编译系列 11.1 – GCC attribute((aligned(x)))详细介绍 attribute&#xff08;(packed)&#xff09; …

针对Android项目蓝牙如何学习

一、概述(Overview) 蓝牙是一种专有的开放式无线技术标准,用于在固定和移动设备之间进行短距离数据交换(使用2400–2480 MHz ISM波段的短波长无线电传输),从而创建具有高度安全性的个人局域网(PANs)。由电信供应商爱立信(telecoms vendor Ericsson)于1994年创建,[1…