前端框架 Nuxt3 集成 Pinia

news2025/1/17 6:03:08

目录

一、Nuxt3集成Pinia

二、Pinia的使用

state的使用

1、基本使用及动态渲染

2、state的重置

3、批量更改state数据

getters的使用

1、getters的基本使用

2、getters传参

actions的使用

1、actions的基本使用


一、Nuxt3集成Pinia

参考官方文档:简介 | Pinia

继承步骤看官方介绍,nuxt3里使用Pinia如下:

1、创建目录如下:

创建composables目录,再在该目录下创建store目录用于存放pinia的store文件,另外在composables目录下创建store.ts文件(文件名可自拟),由于composables目录下的自动导入功能,可以帮助我们快速使用store文件。

 我创建了便于管理的目录结构: 通过index索引文件可以方便的导出每个模块store的仓库。

/composables/store/user/index.ts:

export const user = defineStore("user", {
    state: () => {
        return {
            name: "Dragon Wu",
            age: 100,
            sex: "male",
            token: "xxx"
        }
    }
})

 /composables/store/index.ts索引所有store:

import {user} from "./user/index"

//模块
const stores = {
    user
}

export default stores

 /composables/store.ts自动导入,方便直接调用:

import stores from "./store/index"

export const useStore = stores

二、Pinia的使用

state的使用

1、基本使用及动态渲染

在上面基础上进行演示,

<template>
  <div>
    <span>{{ name }}</span>
    <span>{{ age }}</span>
    <span>{{ sex }}</span>
    <span>{{ token }}</span>
    <div>
      <button @click="changeName">changeName</button>
    </div>
  </div>
</template>

<script lang="ts" setup>
import {ref} from "vue";
import {storeToRefs} from "pinia";

const user = useStore.user()
// 这种解构不能动态渲染
// const {name, age, sex, token} = user
// const name = ref < string > (user.name)
// const age = ref < number > (user.age)
// const sex = ref < string > (user.sex)
// const token = ref < string > (user.token)

//可动态渲染的解构如下:
const {name, age, sex, token} = storeToRefs(user)

const changeName = () => {
  user.name = "Mark"
  console.log(user.name)
}
</script>

页面上使用也很简单,就是先调用全局的自动导入useStore,useStore下有我们的各个store模块,选择user模块,并进行调用user(),便在页面里获取到了状态仓库user。

要注意的是: 普通结构和ref均不能进行动态渲染,要想修改时页面同时生效还需引入pinia的storeToRefs来包裹store仓库。

点击按钮后store发生了改变,同时动态渲染了页面的数据。 

2、state的重置

store.$reset()

//重置store
const reset = () => {
  user.$reset()
}

调用该函数后数据变回了最初的模样:

3、批量更改state数据

store.$patch({要更改的参数})

const patch=()=>{
  user.$patch({
    name: "John",
    age: 3
  })
}

 调用函数后页面数据更新了

getters的使用

getters类似于computed拥有计算的缓存属性。

1、getters的基本使用

user的store文件修改如下:

export const user = defineStore("user", {
    state: () => {
        return {
            name: "Dragon Wu",
            age: 100,
            sex: "male",
            token: "xxx"
        }
    },
    getters: {
        getNewName: (state) => {
            return state.name + ":New"
        }
    }
})

页面中使用:  store.get属性名

<template>
    ...
    <div>
      <span>{{user.getNewName}}</span>
    </div>
  </div>
</template>
<script lang="ts" setup>
//...

const user = useStore.user()

</script>

 获取到了getters里的计算属性

更多参考:Getter | Pinia

2、getters传参

将刚才的getters修改如下:

getters: {
        getNewName: (state) => {
            return (s: string) => state.name + s
        }
    }

页面调用如下:

   <div>
      <span>{{user.getNewName('xxx')}}</span>
    </div>

可以看到传参调用成功。基本就是个函数嵌套实现。

actions的使用

actions类似于method属性,用于处理业务逻辑的

1、actions的基本使用

 也是在user的store里书写案例如下:

export const user = defineStore("user", {
    state: () => {
        return {
            name: "Dragon Wu",
            age: 100,
            sex: "male",
            token: "xxx"
        }
    },
    getters: {
        //...
    },
    actions: {
        growUp() {
            this.age++
        },
        changeName(s: string) {
            this.name = s
        }
    }
})

页面调用

<template>
  <div>
    //...
    <div>
      <span>{{ user.age }}</span>
    </div>
    <div><span>{{ user.name }}</span></div>
    <div>
      <button @click="growUp">growUp</button>
      <button @click="changeName">changeName</button>
    </div>
  </div>
</template>
<script lang="ts" setup>
//...
const user = useStore.user()
const growUp = () => {
  user.growUp()
}
const changeName = () => {
  user.changeName("John")
}

</script>

actions调用成功!

此外,向token的请求存储都可以在action里面实现。 

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

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

相关文章

【JavaSE】常用类(447~515)

String 447.常用类-每天一考 1.画图说明线程的生命周期&#xff0c;以及各状态切换使用到的方法等 状态&#xff0c;方法 2.同步代码块中涉及到同步监视器和共享数据&#xff0c;谈谈你对同步监视器和共享数据的理解&#xff0c;以及注意点。 synchronized(同步监视器){//操…

消息队列RabbitMQ学习笔记(五)高级特性

1. 发布确认高级 在生产环境中由于一些不明原因&#xff0c;导致 RabbitMQ 重启&#xff0c;在 RabbitMQ 重启期间生产者消息投递失败&#xff0c; 导致消息丢失&#xff0c;需要手动处理和恢复。于是&#xff0c;我们开始思考&#xff0c;如何才能进行 RabbitMQ 的消息可靠投…

ccc-sklearn-11-线性回归(1)

1.线性回归概述 回归需求在现实中非常多&#xff0c;自然也有了各种回归算法。最著名的就是线性回归和逻辑回归&#xff0c;衍生出了岭回归、Lasso、弹性网&#xff0c;以及分类算法改进后的回归&#xff0c;如回归树、随机森林回归、支持向量回归等&#xff0c;一切基于特征预…

自定义卷积实现卷积的重参数【手撕代码】

在我的上篇文章中主要对RepVGG进行了解析【RepVGG网络中重参化网络结构解读】&#xff0c;里面详细的对论文中的代码进行了解析&#xff0c;展示了RepVGG在重参数时是如何将训练分支进行合并的&#xff0c;总的一句话就是在推理阶段&#xff0c;会将1x1以及identity分支以paddi…

vivo 游戏中心低代码平台的提效秘诀

作者&#xff1a;vivo 互联网服务器团队- Chen Wenyang 本文根据陈文洋老师在“2022 vivo开发者大会"现场演讲内容整理而成。公众号回复【2022 VDC】获取互联网技术分会场议题相关资料。 在互联网流量见顶和用户需求分层的背景下&#xff0c;如何快速迭代产品功能&#xf…

函数模板-C11/17/14

函数模板 文章目录函数模板定义函数模板使用函数模板样例两阶段翻译 Two-Phase Translation模板的编译和链接问题多模板参数引入额外模板参数作为返回值类型让编译器自己找出返回值类型将返回值声明为两个模板参数的公共类型样例默认模板参数样例重载函数模板模板函数特化非类型…

cocoapods的使用

swift开发之cocoapods的使用 之前介绍了cocoapods的使用&#xff0c;我们可以知道通过pod search XXX(三方依赖库名称)可以就搜索到想要的第三方是否存在。 这次主要简单介绍cocoapods如何引入第三方库的,以BluetoothKit为例。 首先&#xff0c;我们终端中通过cd命令定位到要…

二十二、shiro安全框架基础

一、简介 1. shiro简介 Apache Shiro 是 Java 的一个安全&#xff08;权限&#xff09;框架。Shiro 可以非常容易的开发出足够好的应用&#xff0c;其不仅可以用在JavaSE 环境&#xff0c;也可以用在 JavaEE 环境。Shiro 可以完成&#xff1a;认证、授权、加密、会话管理、与…

“智慧”控漏 削减产销差-城镇供水管网分区计量管理系统

平升电子城镇供水管网分区计量管理系统根据国际国内分区计量的要求和标准研发&#xff0c;专门针对水司漏损控制和产销差管理而设计。系统涵盖分区管理、管网流量和压力监控、水量统计分析、产销差分析、漏损评估、夜间最小流量分析、用水异常报警等功能。核心目标是找到整个管…

ReactJS入门

目录 一&#xff1a;前端开发的演变 二&#xff1a;ReactJS简介 三&#xff1a;搭建环境 四&#xff1a;React快速入门 一&#xff1a;前端开发的演变 到目前为止&#xff0c;前端的开发经历了四个阶段&#xff0c;目前处于第四个阶段。这四个阶段分别是&#xff1a; 阶段一…

equals()与hashcode()之间的关系

1、equals简介 被用来检测两个对象是否相等&#xff0c;即两个对象的内容是否相等&#xff1b; equals 方法&#xff08;是String类从它的超类Object中继承的&#xff09;用于比较引用和比较基本数据类型时具有不同的功能&#xff1a; 比较基本数据类型&#xff0c;如果两个值…

马哥SRE第11周课程作业

ansible role zabbix相关话题1. ansible 常用指令总结&#xff0c;并附有相关示例。1.1 Ansible相关工具1.1.1 ansible-doc1.1.2 ansible 命令用法1.1.3 ansible-console1.1.4 ansible-playbook1.1.5 ansible-vault1.1.5 ansible-galaxy2. 总结ansible playbook目录结构及文件用…

javaee之Spring4

之前说到AccountDao需要继承JdbcDaoSupport这个类&#xff0c;那么现在来看一下这个类的内容 JdbcDaoSupport.java package com.itheima.dao.impl;/*** 此类用于抽取dao中的重复代码 */public class JdbcDaoSupport {private JdbcTemplate jdbcTemplate;public void setJdbcT…

人大金仓数据库备份应用sys_dump的使用

人大金仓数据库软件给数据库管理员用户提供了管理维护数据库的多个客户端应用&#xff0c;更多参考&#xff1a;《KingbaseES客户端应用参考手册》。 我们可以看到备份的应用有两个&#xff1a; 1、sys_dump:将KingbaseES数据库备份为一个脚本文件或者其他归档文件 2、sys_d…

表单校验重要性和多规则校验

表单校验分类 校验位置&#xff1a; 客户端校验 服务端校验 表单校验框架 JSR&#xff1a;java规范提案 303&#xff1a;提供bean属性相关校验规则 JCP:java社区 Hibernate框架中包含一套独立的校验框架hibernate-validator 实际的校验规则 同一个字段有多个约束条件 引用…

股权转让项目:沈阳派尔化学有限公司55%股权转让

股权转让项目&#xff1a;沈阳派尔化学有限公司55%股权转让&#xff1b;该项目由 广州产权交易所 发布&#xff0c;于2022年12月25日被塔米狗平台收录。 该公司在 2021 年最新一期财务报告中&#xff0c; 披露的资产总额&#xff08;万元&#xff09;&#xff1a;7148.98 &…

装修半包包括哪些内容呢?极家精工装修好不好

​装修半包包括哪些内容呢&#xff1f;极家精工装修好不好。在装修房子的时候&#xff0c;很多人都会选择半包装修&#xff0c;因为可以自己挑选材料&#xff0c;自己跟工程比较放心。另外一边比较重要的原因就是能省钱&#xff0c;对于预算有限的小伙伴真的再适合不过啦&#…

唐玄奘把 「JWT 令牌」玩到了极致

唐玄奘把 「JWT 令牌」玩到了极致 你好&#xff0c;我是悟空。 西游记的故事想必大家在暑假看过很多遍了&#xff0c;为了取得真经&#xff0c;唐玄奘历经苦难&#xff0c;终于达成。 在途经各国的时候&#xff0c;唐玄奘都会拿出一个通关文牒交给当地的国王进行盖章&#x…

基于线性表的图书管理系统(java)

目录 1、简介 2、代码 &#xff08;1&#xff09;ManageSystem类 &#xff08;2&#xff09;book类 3、测试程序运行结果截图 &#xff08;1&#xff09;登录和创建 &#xff08;2&#xff09;输出 &#xff08;3&#xff09;查找 &#xff08;4&#xff09;插入 &a…

如何用乐高积木式操作让 ChatGPT 变得更强大?

需求这些日子&#xff0c;很多小伙伴儿玩儿 ChatGPT 不亦乐乎&#xff0c;甚至陷入了沉迷。他们尝试了各种 ChatGPT 的功能。不少功能强悍到不可思议&#xff1b;当然&#xff0c;也有些功能尝试因遇到障碍无法完成。于是很多用户非常失望&#xff0c;觉得 ChatGPT 好像啥都干不…