VUE3 学习笔记(12):对比Vuex与Pinia状态管理的基本理解

本文主要是介绍VUE3 学习笔记(12):对比Vuex与Pinia状态管理的基本理解,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

在组件传值中,当嵌套关系越来越复杂的时候必然会将混乱,是否可以把一些值存在一个公共位置,无须传值直接调用呢?VUEX应运而生,但是从VUE3开始对VUEX的支持就不那么高了,官方推荐使用Pinia。

Vuex配置

ST1:安装vuex

npm install --save vuex

或者

Cnpm install --save vuex

ST2:创建JS文件

目录/src/vuex(创建目录)

目录/src/vuex/index.js

import {createStore} from "vuex";
export default createStore({state:{num:100}
})

入口文件(main.js)

import './assets/main.css'import { createApp } from 'vue'
import App from './App.vue'
import router from './router'
import store from './vuex'const app = createApp(App)app.use(router,store)app.mount('#app')

ST3:使用数据

<template><nav><h3>{{ store.state.num }}</h3></nav><RouterView />
</template>
<script >import store from "@/vuex/index.js";export default {computed: {//第一种获取方法store() {return store}}}</script>

可能因为版本的原因,我使用...mapState(["num"]),然后页面<h3>{{num}}</h3>显示报错,这种方法理论上也是可行的,但没有成功。

新项目中创建Pinia

截止到文章发表日,官方还是推荐放弃vuex,推荐使用Pinia,可以理解Pinia是最新版的VUEX

项目创建选项

理解Pinia的核心js

自带的是组合式API,我在下面的JS代码中做了注释,请细看

位置:目录/src/stores/counter.js

import { ref, computed } from 'vue'
import { defineStore } from 'pinia'export const useCounterStore= defineStore('counter', () => {//ref 相当于state 相当于data定义const count = ref(5)const name = ref('test')//计算属性 相当于gettersconst doubleCount = computed(() => count.value * 2)//相当于methods 相当于actionfunction increment() {count.value++}function changeName(newName) {name.value = newName
}//最后把它作为一个对象暴露出去return { count,name, doubleCount, increment,changeName }
})

使用与传值

<template><h3>{{ user.doubleCount }}</h3><div><button @click="user.increment">{{ user.name }} count is: {{ user.count }}</button></div><div><button @click="user.changeName('张三')">修改名称</button></div>
</template>
<script setup>
import { RouterLink, RouterView } from 'vue-router'
import HelloWorld from './components/HelloWorld.vue'
import {useCounterStore} from "@/stores/counter.js";
const user = useCounterStore();
</script>

为什么推荐使用Pinia

这篇关于VUE3 学习笔记(12):对比Vuex与Pinia状态管理的基本理解的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1031707

相关文章

深度解析Nginx日志分析与499状态码问题解决

《深度解析Nginx日志分析与499状态码问题解决》在Web服务器运维和性能优化过程中,Nginx日志是排查问题的重要依据,本文将围绕Nginx日志分析、499状态码的成因、排查方法及解决方案展开讨论... 目录前言1. Nginx日志基础1.1 Nginx日志存放位置1.2 Nginx日志格式2. 499

在macOS上安装jenv管理JDK版本的详细步骤

《在macOS上安装jenv管理JDK版本的详细步骤》jEnv是一个命令行工具,正如它的官网所宣称的那样,它是来让你忘记怎么配置JAVA_HOME环境变量的神队友,:本文主要介绍在macOS上安装... 目录前言安装 jenv添加 JDK 版本到 jenv切换 JDK 版本总结前言China编程在开发 Java

Spring Boot Actuator应用监控与管理的详细步骤

《SpringBootActuator应用监控与管理的详细步骤》SpringBootActuator是SpringBoot的监控工具,提供健康检查、性能指标、日志管理等核心功能,支持自定义和扩展端... 目录一、 Spring Boot Actuator 概述二、 集成 Spring Boot Actuat

MySQL多实例管理如何在一台主机上运行多个mysql

《MySQL多实例管理如何在一台主机上运行多个mysql》文章详解了在Linux主机上通过二进制方式安装MySQL多实例的步骤,涵盖端口配置、数据目录准备、初始化与启动流程,以及排错方法,适用于构建读... 目录一、什么是mysql多实例二、二进制方式安装MySQL1.获取二进制代码包2.安装基础依赖3.清

Java Spring的依赖注入理解及@Autowired用法示例详解

《JavaSpring的依赖注入理解及@Autowired用法示例详解》文章介绍了Spring依赖注入(DI)的概念、三种实现方式(构造器、Setter、字段注入),区分了@Autowired(注入... 目录一、什么是依赖注入(DI)?1. 定义2. 举个例子二、依赖注入的几种方式1. 构造器注入(Con

详解MySQL中JSON数据类型用法及与传统JSON字符串对比

《详解MySQL中JSON数据类型用法及与传统JSON字符串对比》MySQL从5.7版本开始引入了JSON数据类型,专门用于存储JSON格式的数据,本文将为大家简单介绍一下MySQL中JSON数据类型... 目录前言基本用法jsON数据类型 vs 传统JSON字符串1. 存储方式2. 查询方式对比3. 索引

从入门到精通详解LangChain加载HTML内容的全攻略

《从入门到精通详解LangChain加载HTML内容的全攻略》这篇文章主要为大家详细介绍了如何用LangChain优雅地处理HTML内容,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录引言:当大语言模型遇见html一、HTML加载器为什么需要专门的HTML加载器核心加载器对比表二

SpringBoot中六种批量更新Mysql的方式效率对比分析

《SpringBoot中六种批量更新Mysql的方式效率对比分析》文章比较了MySQL大数据量批量更新的多种方法,指出REPLACEINTO和ONDUPLICATEKEY效率最高但存在数据风险,MyB... 目录效率比较测试结构数据库初始化测试数据批量修改方案第一种 for第二种 case when第三种

MySql基本查询之表的增删查改+聚合函数案例详解

《MySql基本查询之表的增删查改+聚合函数案例详解》本文详解SQL的CURD操作INSERT用于数据插入(单行/多行及冲突处理),SELECT实现数据检索(列选择、条件过滤、排序分页),UPDATE... 目录一、Create1.1 单行数据 + 全列插入1.2 多行数据 + 指定列插入1.3 插入否则更

C#连接SQL server数据库命令的基本步骤

《C#连接SQLserver数据库命令的基本步骤》文章讲解了连接SQLServer数据库的步骤,包括引入命名空间、构建连接字符串、使用SqlConnection和SqlCommand执行SQL操作,... 目录建议配合使用:如何下载和安装SQL server数据库-CSDN博客1. 引入必要的命名空间2.