【vue3 for beginner】Pinia基本用法:存储user的信息

北海道富士山景色

🌈Don’t worry , just coding!
内耗与overthinking只会削弱你的精力,虚度你的光阴,每天迈出一小步,回头时发现已经走了很远。

📗概念

Pinia 简介

Pinia 是一个用于 Vue.js 应用的状态管理库,是 Vuex 的替代品。它提供了一个简单、直观的 API 来管理应用的状态,特别适用于 Vue 3 和 Composition API。Pinia 设计为轻量级且易于使用,支持模块化、类型推导和更好的开发体验。
Pinia啥时候用?
通常是有全局的生命周期时使用,如用户的login信息等。
如果是组件内部的数据,不需要用Pinia,只要维护在组件内就可以了。

主要特点

  • 轻量级:比 Vuex 更少的代码和更简单的 API。
  • 模块化:支持将状态分割成多个 store,便于管理。
  • TypeScript支持:内置支持 TypeScript,提供类型推导。
  • 热重载:在开发模式下支持热重载,提升开发效率。
  • 与 Vue Router集成:可以轻松管理路由状态。

Pinia 的基本用法

  1. 安装 Pinia,取决于你使用的包管理工具
npm install pinia

yarn add pinia
  1. 创建 Pinia Store
    在 Vue 应用中创建一个 Pinia 实例,并用export导出一个变量名为useMainStore的store。
    我们用user来存储用户的信息并交给Pinia管理。
    src/stores/user.js
// stores/user.store.js
import { defineStore } from 'pinia';export const useUserStore = defineStore('user', {state: () => ({name: 'John Doe', // 初始名字age: 25,          // 初始年龄}),actions: {updateName(newName) {this.name = newName; // 更新名字},incrementAge() {this.age++; // 年龄加 1},},
});
  1. 在 Vue 应用中使用 Pinia,找到main.js文件将 Pinia 实例添加到 Vue 应用中。
// main.js
import {createApp} from 'vue'
import App from './App.vue'
// 第一步:引入pinia
import {createPinia} from 'pinia'const app = createApp(App)
// 第二步:创建pinia
const pinia = createPinia()
// 第三步:安装pinia
app.use(pinia)
app.mount('#app')
  1. 使用 Store
    在组件中,使用 useMainStore 来访问和修改状态。

User.vue

<template><div><h1>User Info</h1><p>Name: {{ userStore.name }}</p><p>Age: {{ userStore.age }}</p><button @click="userStore.incrementAge">Increase Age</button><input v-model="newName" @blur="updateUserName" placeholder="Change name" /></div>
</template><script>
//import { useUserStore } from '../stores/user'; // 导入 User Store
import {useUserStore} from '@store/user'
import { ref } from 'vue';export default {setup() {const userStore = useUserStore(); // 使用 User Storeconst newName = ref(''); // 创建响应式变量const updateUserName = () => {userStore.updateName(newName.value); // 更新名字newName.value = ''; // 清空输入框};return {userStore, // 返回用户 StorenewName,updateUserName,};},
};
</script>

App.vue

<template><User/></template><script setup lang="ts" name="App">import User from './components/User.vue'</script>

store

Store是一个保存:状态、业务逻辑 的实体,每个组件都可以读取、写入它。

它有三个概念:state、getter、action,相当于组件中的: data、 computed 和 methods

修改数据的三种方式

直接修改

	//script中先获取storeconst userStore = useUserStore(); // 使用 User Store先取到值//在tmplate中直接修改<button @click="userStore.name = 'John'">Set Name to John</button>

批量修改

    <button @click="updateUser">通过$patch修改name和age</button>//批量修改,通过pathconst updateUser = () => {userStore.$patch({name: 'Martin', // 批量修改名字age: 88,        // 批量修改年龄});};return {updateUser,userStore}// 返回用户 Store和方法

借助actions

// stores/user.store.js
import { defineStore } from 'pinia';export const useUserStore = defineStore('user', {state: () => ({name: 'John Doe', // 初始名字age: 25,          // 初始年龄}),actions: {updateName(newName) {this.name = newName; // 更新名字},incrementAge() {this.age++; // 年龄加 1},},
});

三种修改方式效果展示

只修改User.vue即可

<template><div><h1>User Info</h1><p>Name: {{ userStore.name }}</p><p>Age: {{ userStore.age }}</p><button @click="userStore.incrementAge">Increase Age</button><button @click="userStore.name = 'John'">直接修改name为John</button><input v-model="newName" @blur="updateUserName" placeholder="Change name" /><button @click="updateUser">通过$patch修改name和age</button></div>
</template><script>
//import { useUserStore } from '../stores/user'; // 导入 User Store
import {useUserStore} from '@store/user'
import { ref } from 'vue';export default {setup() {const userStore = useUserStore(); // 使用 User Storeconst newName = ref(''); // 创建响应式变量//直接修改const updateUserName = () => {userStore.updateName(newName.value); // 更新名字newName.value = ''; // 清空输入框};//批量修改,通过pathconst updateUser = () => {userStore.$patch({name: 'Martin', // 批量修改名字age: 88,        // 批量修改年龄});};return {userStore, // 返回用户 StorenewName,updateUserName,updateUser};},
};
</script>

页面效果

在这里插入图片描述
这里我给页面加上淡蓝色的背景,稍微美观一些。
增加了背景色的User.vue代码如下。

<template><div class="container"> <h1>User Info</h1><p>Name: {{ userStore.name }}</p><p>Age: {{ userStore.age }}</p><button @click="userStore.incrementAge">Increase Age</button><button @click="userStore.name = 'John'">直接修改name为John</button><input v-model="newName" @blur="updateUserName" placeholder="Change name" /><button @click="updateUser">通过$patch修改name和age</button></div>
</template><script>
//import { useUserStore } from '../stores/user'; // 导入 User Store
import {useUserStore} from '@store/user'
import { ref } from 'vue';export default {setup() {const userStore = useUserStore(); // 使用 User Storeconst newName = ref(''); // 创建响应式变量//直接修改const updateUserName = () => {userStore.updateName(newName.value); // 更新名字newName.value = ''; // 清空输入框};//批量修改,通过pathconst updateUser = () => {userStore.$patch({name: 'Martin', // 批量修改名字age: 88,        // 批量修改年龄});};return {userStore, // 返回用户 StorenewName,updateUserName,updateUser};},
};
</script>
<style scoped>
.container {background-color: #e0f7fa; /* 淡蓝色背景 */padding: 20px; /* 添加一些内边距 */border-radius: 8px; /* 可选:添加圆角 */
}
</style>

💡 Tips小知识点

修改数据的方式区别:
1、直接操作两个变量修改name和age
2、通过 $patch批量修改name和age

直接修改会触发两次vue的事件,类似于watch,通过 $patch修改无论结构内部有多少属性,也只会触发一次vue的事件,性能会更好。

💪无人扶我青云志,我自踏雪至山巅。
在这里插入图片描述

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

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

相关文章

动态规划(二) ---斐波那契型深度解析

一、使用最小花费爬楼梯 题目链接&#xff1a;746. 使用最小花费爬楼梯 - 力扣&#xff08;LeetCode&#xff09; 题目&#xff1a;给你一个整数数组 cost &#xff0c;其中 cost[i] 是从楼梯第 i 个台阶向上爬需要支付的费用。一旦你支付此费用&#xff0c;即可选择向上爬一…

记录一下,解决js内存溢出npm ERR! code ELIFECYCLEnpm ERR! errno 134 以及 errno 9009

项目是个老项目&#xff0c;依赖包也比较大&#xff0c;咱就按正常流程走一遍来详细解决这个问题&#xff0c;先看一下node版本&#xff0c;我用的是nvm管理的&#xff0c;详细可以看我的其他文章 友情提醒&#xff1a;如果项目比较老&#xff0c;包又大&#xff0c;又有一些需…

Luma 视频生成 API 对接说明

Luma 视频生成 API 对接说明 随着 AI 的应用变广&#xff0c;各类 AI 程序已逐渐普及。AI 已逐渐深入到人们的工作生活方方面面。而 AI 涉及的行业也越来越多&#xff0c;从最初的写作&#xff0c;到医疗教育&#xff0c;再到现在的视频。 Luma 是一个专业高质量的视频生成平…

三维扫描检测在汽车制造中的应用

三维扫描&#xff0c;通过先进三维扫描技术获取产品和物体的形面三维数据&#xff0c;建立实物的三维图档&#xff0c;满足各种实物3D模型数据获取、三维数字化展示、3D多媒体开发、三维数字化存档、逆向设计、产品开发、直接3D打印制造或辅助加工制造等一系列的应用。 三维扫描…

应用案例 | 船舶海洋: 水下无人航行器数字样机功能模型构建

水下无人航行器数字样机功能模型构建 一、项目背景 为响应水下装备系统研制数字化转型及装备系统数字样机建设的需要&#xff0c;以某型号水下无人航行器&#xff08;Underwater Unmanned Vehicle&#xff0c;UUV&#xff09;为例&#xff0c;构建UUV数字样机1.0功能模型。针对…

【unity小技巧】分享vscode如何开启unity断点调试模式,并进行unity断点调试(2024年最新的方法,实测有效)

文章目录 前言一、前置条件1、已安装Visual Studio Code&#xff0c;并且unity首选项>外部工具>外部脚本编辑器选择为Visual Studio Code [版本号]&#xff0c;2、在Visual Studio Code扩展中搜索Unity&#xff0c;并安装3、同时注意这个插件下面的描述&#xff0c;需要根…

P4645 [COCI2006-2007#3] BICIKLI(Tarjan+topsort求到某点的方案数)

P4645 [COCI2006-2007#3] BICIKLI - 洛谷 | 计算机科学教育新生态 思路&#xff1a; 我们考虑输出inf的情况&#xff0c;可以发现当从1出发到2经过的任意一个点处于一个环内时&#xff0c;路径条数是无穷多的。 有向图上从s到t的经过点&#xff0c;就是从s出发所能经过的所有…

基于eFramework车控车设中间件介绍

车设的发展&#xff0c;起源于汽车工业萌芽之初&#xff0c;经历了机械式操作的原始粗犷&#xff0c;到电子式调控技术的巨大飞跃&#xff0c;到如今智能化座舱普及&#xff0c;远程车控已然成为汽车标配&#xff0c;车设功能选项也呈现出爆发式增长&#xff0c;渐趋多元繁杂。…

【AI系统】模型压缩基本介绍

基本介绍 随着神经网络模型的复杂性和规模不断增加&#xff0c;模型对存储空间和计算资源的需求越来越多&#xff0c;使得部署和运行成本显著上升。模型压缩的目标是通过减少模型的存储空间、减少计算量或提高模型的计算效率&#xff0c;从而在保持模型性能的同时&#xff0c;…

解决Unity编辑器Inspector视图中文注释乱码

1.问题介绍 新创建一个脚本&#xff0c;用VS打开编辑&#xff0c;增加一行中文注释保存&#xff0c;在Unity中找到该脚本并选中&#xff0c;Inspector视图中预览的显示内容&#xff0c;该中文注释显示为乱码&#xff0c;如下图所示&#xff1a; 2.图示解决步骤 按上述步骤操作…

Java项目实战II基于微信小程序的旅游社交平台(开发文档+数据库+源码)

目录 一、前言 二、技术介绍 三、系统实现 四、核心代码 五、源码获取 全栈码农以及毕业设计实战开发&#xff0c;CSDN平台Java领域新星创作者&#xff0c;专注于大学生项目实战开发、讲解和毕业答疑辅导。 一、前言 随着移动互联网的迅猛发展&#xff0c;旅游已经成为人…

【错误记录】Android Studio 开发环境内存占用过多 ( 记录内存使用情况 )

文章目录 一、报错信息二、AS 内存记录分析 一、报错信息 使用 Android Studio 一段时间后 , 内存爆了 , 占用了 10G 的内存 ; 二、AS 内存记录分析 AS 刚启动时 , 只占 2014M 内存 ; 编译运行程序后 , 内存变为 2800M 左右 ; 设置显示的运行程序对应的日志 , 占用内存 就会稳定…

开发类似的同款小程序系统制作流程

很多老板想要开发一款和别人家类似的同款小程序系统&#xff0c;但是不知道该怎么开发制作&#xff0c;本文就为大家详细介绍一下开发类似的同款小程序的流程为大家做参考。 一、前期准备找到对标小程序&#xff1a;首先&#xff0c;需要找到你想要模仿的同款小程序&#xff0…

三轴云台之光学变焦功能篇

三轴云台的光学变焦功能是其重要的性能特点之一&#xff0c;该功能允许用户在不改变相机与拍摄对象之间物理距离的情况下&#xff0c;通过调整镜头的焦距来改变拍摄对象的放大倍数或视野范围。 一、光学变焦的原理 光学变焦是通过改变镜头内部的透镜组合来改变焦距的。当镜头中…

android WebRtc 无法推流以及拉流有视频无声音问题

最近在开发使用WebRtc进行视频通话和语音通话&#xff0c;我使用的设备是MTK的手机&#xff0c;期间后台的技术人员几乎没法提供任何帮助&#xff0c;只有接口和测试的web端&#xff0c;有遇到不能推流。推流成功网页端有画面有声音&#xff0c;但是安卓端有画面&#xff0c;没…

锻造船用发动机动力系统,铸强船舶“心脏”

船舶是海洋、湖泊及河流中重要的水上交通工具&#xff0c;不仅能够促进海上经济的发展&#xff0c;还能够保卫国家的制海权。船舶动力装置&#xff0c;也就是船舶的核心动力源——船用发动机动力系统对船舶的重要作用不言自明&#xff0c;关系到船舶的性能质量&#xff0c;能够…

uniapp 自定义导航栏增加首页按钮,仿微信小程序操作胶囊

实现效果如图 抽成组件navbar.vue&#xff0c;放入分包 <template><view class"header-nav-box":style"{height:Props.imgShow?:statusBarHeightpx,background:Props.imgShow?:Props.bgColor||#ffffff;}"><!-- 是否使用图片背景 false…

WPF中的VisualState(视觉状态)

以前在设置控件样式或自定义控件时&#xff0c;都是使用触发器来进行样式更改。触发器可以在属性值发生更改时启动操作。 像这样&#xff1a; <Style TargetType"ListBoxItem"><Setter Property"Opacity" Value"0.5" /><Setter …

Java 实现手机号码归属地查询

1.pom坐标 <dependency><groupId>com.googlecode.libphonenumber</groupId><artifactId>geocoder</artifactId><version>2.205</version></dependency> 2.代码 package test;import com.alibaba.excel.util.StringUtils; im…

C 进阶 — 数据在内存中的存储

C 进阶 — 数据在内存中的存储 主要内容 1、数据类型详细介绍 2、整形在内存中的存储&#xff1a;原码、反码、补码 3、大小端字节序介绍及判断 4、浮点型在内存中的存储解析 一 数据类型介绍 基本内置类型 char //字符数据类型 1 short //短整型 …