【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.mzph.cn/bicheng/63284.shtml

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

相关文章

使用Goland对6.5840项目进行go build出现异常

使用Goland对6.5840项目进行go build出现异常 Lab地址: https://pdos.csail.mit.edu/6.824/labs/lab-mr.html项目地址: git://g.csail.mit.edu/6.5840-golabs-2024 6.5840运行环境: mac系统 goland git clone git://g.csail.mit.edu/6.5840-golabs-2024 6.5840 cd 6.5840/src…

React基础知识四 Hooks

什么是hooks&#xff1f; (coderwhy) hooks是react 16.8&#xff08;2019年&#xff09;出的新特性。 react有两种形式来创建组件——类式和函数式。在hooks之前类式组件就是react最主流的编程方式。 这个时候&#xff0c;函数式组件是非常鸡肋的&#xff0c;几乎没什么用。因…

电子病历静态数据脱敏路径探索

一、引言 数据脱敏&#xff08;Data Masking&#xff09;&#xff0c;屏蔽敏感数据&#xff0c;对某些敏感信息&#xff08;比如patient_name、ip_no、ad、no、icd11、drug等等 &#xff09;通过脱敏规则进行数据的变形&#xff0c;实现隐私数据的可靠保护。电子病历作为医疗领…

AIGC 012-Video LDM-更进一步,SD作者将LDM扩展到视频生成任务!

AIGC 012-Video LDM-Stable Video diffusion前身&#xff0c;将LDM扩展到视频生成任务&#xff01; 文章目录 0 论文工作1论文方法实验结果 0 论文工作 Video LDM作者也是Stable diffusion的作者&#xff0c;作者在SD的架构上进行扩展&#xff0c;实现了视频的生成。后续在Vid…

ABAP DIALOG屏幕编程1

一、DIALOG屏幕编程 DIALOG屏幕编程是SAP ABAP中用于创建用户交互界面的一种技术&#xff0c;主要用于开发事务性应用程序。它允许用户通过屏幕输入或操作数据&#xff0c;程序根据用户的操作执行逻辑处理。 1、DIALOG编程的主要组件 a、屏幕 (Screen) DIALOG程序的核心部分…

青训营-豆包MarsCode技术训练营试题解析二十七

介绍 ‌豆包青训营‌是由字节跳动和稀土掘金社区共同发起的技术培训和人才选拔项目。该项目的目标是培养具有职业竞争力的优秀开发工程师&#xff0c;并提供全程免费的课程&#xff0c;不收取任何费用‌。 课程内容和方向 豆包青训营的课程涵盖前端、后端和AI方向。在这个飞…

人工智能学习用的电脑安装cuda、torch、conda等软件,版本的选择以及多版本切换

接触人工智能的学习三个月了&#xff0c;每天与各种安装包作斗争&#xff0c;缺少依赖包、版本高了、版本低了、不兼容了、系统做一半从头再来了。。。这些都是常态。三个月把单位几台电脑折腾了不下几十次安装&#xff0c;是时候总结一下踩过的坑和积累的经验了。 以一个典型的…

华为关键词覆盖应用市场ASO优化覆盖技巧

在我国的消费者群体当中&#xff0c;华为的品牌形象较高&#xff0c;且产品质量过硬&#xff0c;因此用户基数也大。与此同时&#xff0c;随着影响力的增大&#xff0c;华为不断向外扩张&#xff0c;也逐渐成为了海外市场的香饽饽。作为开发者和运营者&#xff0c;我们要认识到…

Vue+Vite 组件开发的环境配置(超级简单)

vite是什么 Vite 是一个现代化的前端构建工具和开发服务器&#xff0c;它特别适用于构建大型的单页面应用&#xff08;SPA&#xff09;。Vite 旨在提供极快的冷启动速度&#xff0c;并且能够即时地&#xff08;几乎实时地&#xff09;更新模块&#xff0c;这得益于其利用原生 …

从仪表盘探索 MongoDB 关键指标

这是 MongoDB 监控系列文章的第七篇&#xff0c;前面几篇文章的链接如下&#xff1a; MongoDB 监控&#xff08;一&#xff09;MongoDB 监控&#xff08;二&#xff09;MongoDB 监控&#xff08;三&#xff09;MongoDB 监控&#xff08;四&#xff09;MongoDB 监控&#xff08…

mac安装php和xdebug调试

要在Mac上安装PHP 7.4&#xff0c;你可以通过几种方式来完成&#xff0c;但鉴于PHP7.4官方已不再维护&#xff0c;并且Homebrew默认仓库中不再提供此版本&#xff0c;我们需要从第三方仓库或直接从源代码进行安装。本文以brew方式安装&#xff0c;如果安装的是8.0以上&#xff…

UIlicious - 自动化端到端测试

在现代软件开发中&#xff0c;测试自动化已然成为产品交付质量的基石。而端到端测试&#xff08;E2E&#xff09;&#xff0c;作为验证整个应用流畅运行的关键&#xff0c;常常是测试工作中最具挑战性的一环。这时&#xff0c;一款简单高效的自动化测试工具——UIlicious&#…

新一代零样本无训练目标检测

&#x1f3e1;作者主页&#xff1a;点击&#xff01; &#x1f916;编程探索专栏&#xff1a;点击&#xff01; ⏰️创作时间&#xff1a;2024年12月2日21点02分 神秘男子影, 秘而不宣藏。 泣意深不见, 男子自持重, 子夜独自沉。 论文链接 点击开启你的论文编程之旅h…

Python_Flask01

所有人都不许学Java了&#xff0c;都来学Python&#xff01; 如果不来学的话请网爆我的老师---蔡老师 Flask的前世姻缘 我不知道&#xff0c;没啥用&#xff0c;要学好这个框架&#xff0c;其实多读书&#xff0c;多看报就行了&#xff0c;真心想了解的话&#xff01; Welcom…

微信小程序版小米商城的搭建流程详解!

很多初学微信小程序语法的同学&#xff0c;可能不知道如何布局和搭建一个项目&#xff0c;下面我将讲解初学者如何搭建项目和注意事项。 目录 一、 app.json的配置 二、引入vant 三、主页banner携带参数跳转 四、点击商品项跳转详情页 一、 app.json的配置 {"pages&q…

Neo4j启动时指定JDK版本

项目使用jdk1.8&#xff0c;同时需要安装neo4j5.15版本&#xff0c;使用jdk17. 1.mac或者liunx&#xff0c;找到neo4j目录bin的下neo4j文件 设置JAVA_HOME: 2.windows,找到bin下面的neo4j.bat文件 set "JAVA_HOME{JDK文件目录}" 重启后生效。

AI大模型驱动数据分析:利用自然语言实现数据查询与可视化(1)

在当今AI驱动的时代&#xff0c;数据分析已成为各行各业不可或缺的能力。然而&#xff0c;传统的数据分析流程通常需要掌握SQL、数据处理和可视化等多项专业技能&#xff0c;这对非技术背景的业务人员来说是一个不小的挑战。 想象一下&#xff0c;当数据中心的负责人打开手机时…

汽车总线协议分析-FlexRay总线

随着汽车智能化发展&#xff0c;汽车增加安全性和舒适体验的功能增多&#xff0c;用于实现这些功能的传感器、ECU的数量也在持续上升&#xff0c;严重阻碍了线控技术的发展。常用的CAN、LIN等总线由于缺少同步性、确定性和容错性不能满足汽车线控系统(X-by-Wire)的要求。因此&a…

第二篇:k8s工作流程

我们来看通过deployment部署pod的常规流程&#xff1a; kubectl向apiserver发送部署请求&#xff08;例如使用 kubectl create -f deployment.yml&#xff09;apiserver将 Deployment 持久化到etcd&#xff1b;etcd与apiserver进行一次http通信。controller manager通过watch a…

SPC三种判定准则的算法

1.连续6个点递增或递减 //传入数据列表 //返回连续X个及以上递增或递减的数组下标int n = array.Length; int X = X_in; List<int> regions_start = new List<int>(); List<int> regions_end = new List<int>();if(Open){for (int i = 0; i < n - (…