Vue3 Vite3 状态管理 pinia基本使用、 持久化、在路由守卫中使用状态

《基于 vite 创建 vue3 项目》)一文中整合了 pinia,有不少伙伴不知道 pinia 是什么,本文简单介绍 pinia。主要包括三方面内容:

  1. pinia 的基本用法,在《基于 vite 创建 vue3 项目》中 demo 的基础上简单重构。
  2. 如何持久化 pinia 中的数据,保证浏览器刷新时,pinia 中的数据不丢失;
  3. vue-router 路由守卫中如何使用 pinia

文中的 demo 仍然基于 vite

1 pinia 的使用

1.1 pinia 是什么

在 vue 2.x 中,vuex 是官方的状态管理库,并且 vue 3 中也有对应的 vuex 版本。但 vue 作者尤大神看了 pinia 后,强势推荐使用 pinia 作为状态管理库。下图是 vue 官网 “生态系统”,pinia 是 vue 生态之一。

在这里插入图片描述

1.2 pinia 的特点

  1. 支持 vue2 和 vue3,两者都可以使用 pinia
  2. 语法简洁,支持 vue3 中 setup 的写法,不必像 vuex 那样定义 statemutationsactionsgetters 等,可以按照 setup Composition API 的方式返回状态和改变状态的方法,实现代码的扁平化;
  3. 支持 vuex 中 stateactionsgetters 形式的写法,丢弃了 mutations,开发时候不用根据同步异步来决定使用 mutationsactions,pinia 中只有 actions
  4. TypeScript 支持非常友好。

1.3 pinia 的使用

在《基于 vite 创建 vue3 项目》中已经整合了 pinia,现简单回顾并进行一些调整。

  1. 安装 pinia 依赖:
yarn add pinia
  1. 创建 pinia 实例(根存储 root store):

之前咱是在 main.ts 中创建的,现将其抽取到独立的文件中:

src/store/index.ts

import {
    createPinia } from 'pinia'

const pinia = createPinia()

export default pinia
  1. main.ts 中以插件的方式传递给 App 实例。
...
import pinia from '@/store'
...
app.use(pinia)
...
  1. store/ 目录下创建 modules 目录,存储每个模块的状态,将之前的 demo.ts 移动到 store/modules/ 中。这里使用最新的 Composition API setup 的方式来定义状态。

src/store/modules/demo.ts

import {
    defineStore } from 'pinia'
import {
    ref } from 'vue'

const useDemoStore = defineStore('demo', () => {
   
  const counter = ref(0)

  const increment = () => {
   
    counter.value++
  }

  return {
   
    counter,
    increment
  }
})

export default useDemoStore
  1. 在组件 about.vue 中使用 demo 中的状态 counter 和改变状态的函数 increment。代码和之前一样。

先引入 demo.ts 中定义的 useDemoStore 函数,通过该函数创建 demoStore 实例。然后就可以调用 demoStore 的状态 counterincrement 函数了。这里需要注意,无论是 pinia 还是 vuex,通过解构的方式获取状态,会导致状态失去响应性。如:

const {
    counter } = demoStore

此时的 counter 会丢失响应性,当其值改变时,其他组件不会监听到。所以 pinia 提供了 storeToRefs 函数,使其解构出来的状态仍然具备响应性。

const {
    counter } = storeToRefs(demoStore)

src/views/about.vue 完整代码如下:

<template>
  <div class="about">
    <h1>This is an about page</h1
  • 6
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: Vue3是Vue.js的最新版本,它带来了许多新的特性和改进,例如更快的渲染速度和更好的TypeScript支持。 Vite是一个新的构建工具,它可以快速地构建现代化的Web应用程序。它使用ES模块作为构建系统的基础,可以实现快速的热重载和快速的开发体验。 TypeScript是一种静态类型语言,它可以帮助开发者在编写代码时发现潜在的错误,并提供更好的代码提示和自动补全功能。 Vue Router是Vue.js的官方路由管理器,它可以帮助开发者构建单页应用程序。它提供了许多有用的功能,例如路由参数、路由导航守卫和动态路由。 Pinia是一个新的状态管理库,它可以帮助开发者管理Vue.js应用程序状态。它提供了一种简单的方式来定义和使用状态,并且可以与Vue.js的生命周期钩子和Vue Router集成。 ### 回答2: Vue3是基于Vue2的改进版本,它在性能和开发体验方面有很大的提升。其最重要的特点是它的虚拟DOM模型改进了响应式数据的渲染,使得性能得到了提高。同时,Vue3还引入了Composition API,这是一个函数式的API,将逻辑分离开来,使得代码更加简洁易懂。 Vite是一款基于ESM构建工具,并使用原生ES模块作为开发时的静态编译器,它不需要像Webpack那样将所有的文件都打包在一起,因此在开发时可以更加快速地编译和构建项目。同时,Vite还支持热重载,这使得开发和调试过程更加高效。 TypeScript是一种静态类型的语言,它可以在开发时提供更好的代码提示和类型检查,帮助开发者在编写代码时避免常见的错误。由于Vue3是使用TypeScript编写的,因此它对TypeScript提供了更好的支持。 Vue Router是Vue官方提供的路由管理器,它可以帮助开发者对单页应用进行路由管理Vue3对Vue Router进行了改进,现在它可以使用Composition API来编写路由逻辑,并且支持动态路由。 Pinia则是Vue官方推出的状态管理库,与Vuex不同,它使用了新的API,并且更加轻量级。Pinia也允许使用Composition API进行编写,这样可以在处理状态管理方面更加灵活和高效。 综上所述,Vue3、Vite、TypeScript、Vue Router和Pinia都是当前最流行、最优秀的前端开发工具和库,它们的使用可以让开发者更加高效、简洁地进行开发。同时,它们都是基于Vue生态的,因此可以很好地与Vue进行整合,从而使得Vue前端开发领域的地位更加稳固、重要。 ### 回答3: Vue3是一个用于构建用户界面的渐进式框架,它具有更快、更轻量级、更易学习等特点。Vite是一个基于浏览器原生ES模块热更新启动的构建工具,它能够快速而且高效地打包项目,并且拥有快速的热重载和源码分割。 在Vue3使用TypeScript可以提供更好的类型推导和编辑器支持,使开发更加高效、可靠。Vue-Router是Vue3的路由管理器,它能够方便地处理路由并且支持动态路由、嵌套路由、路由拦截等功能。而Pinia是一个状态管理库,可以更好地管理Vue3应用程序状态,它使用类似于Vuex的API,提供了状态管理和响应式数据持久化方案。 使用Vite集成Vue3和TypeScript可以让我们快速构建Vue3项目并且享受到TypeScript的类型检查和Vue3的新特性,同时还能使用热重载和源码分割。在应用程序使用Vue-Router和Pinia可以更好地管理路由和状态,提升应用的性能和可维护性。 总之,Vue3、Vite、TypeScript、Vue-Router和Pinia这五种技术可以很好的组合在一起,为我们带来高效、可靠、灵活的开发体验,助力我们更好地构建出高质量的Vue3应用程序。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序员优雅哥

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值