Vue3--Vite和Pinia

目录

一、PNPM

二、vite

2.1、Vite 和 Webpack 区别

2.2、搭建一个Vite项目

2.3、路由使用

2.4、vuex

三、pinia

3.1、与vuex有什么不同

3.2、pinia基本使用

3.3、pinia--state

3.4、pinia--修改--action

3.5、pinia--重置数据--$reset

3.6、pinia--监听数据修改--$subscribe

3.7、pinia--处理异步操作--action

3.8、pinia--getters

3.9、pinia--模块化


一、PNPM

pnpm是 Node.js 的替代包管理器。它是 npm 的直接替代品,但速度更快、效率更高。

为什么效率更高 ? 当您安装软件包时, 我们会将其保存在您机器上的全局存储中,然后我们会从中创建一个硬链接pnpm 通过硬链接的方式保证了相同的包不会被重复下载,比如说我们已经在 A 中下载过一次 xxx@4.17.1 版本,那我们后续在 B 中安装 xxx@4.17.1 的时候是会被复用的,具体就是 A 中的 xxx 中的文件和 B 中的 xx 中的文件指向的是同一个

PNPM不是进行复制。对于模块的每个版本,磁盘上只保留一个副本。例如,当使用 npm 或 yarn 时,如果您有 100 个使用的包,则磁盘上将有 100 个 lodash 副本。pnpm 可让您节省数 GB 的磁盘空间!

安装:npm install -g pnpm

二、vite

原来咱们学习v3的时候 使用的是vue/cli脚手架(实质上是帮助我们封装好了webpack来帮助我们构建与编译项目)

Vite 是 vue 的作者尤雨溪在开发 vue3.0的时候开发的一个 web 开发构建工具。其本人在后来对 vue3 的宣传中对自己的新作品 Vite 赞不绝口,并表示自己 ”再也回不去 webpack 了“ 。那么 Vite 究竟有什么魅力

2.1、Vite 和 Webpack 区别

Vite 优势:

1.vite 开发服务器启动速度比 webpack 快 webpack 会先打包,然后启动开发服务器,请求服务器时直接给予打包结果。 vite 在启动开发服务器时不需要打包,也就意味着不需要分析模块的依赖、不需要编译,因此启动速度非常快。当浏览器请求某个模块时,再根据需要对模块内容进行编译。这种按需动态编译的方式,极大的缩减了编译时间,项目越复杂、模块越多,vite的优势越明显。

2.vite 热更新比 webpack 快 当改动了一个模块后,vite仅需让浏览器重新请求该模块即可,不像webpack那样需要把该模块的相关依赖模块全部编译一次,效率更高。

3.vite 构建速度快,比 webpack 的 nodejs,快 10-100 倍。

Vite 劣势:

1.生态不及webpack,加载器、插件不够丰富

2.项目的开发浏览器要支持 ES Module,而且不能识别 CommonJS 语法

2.2、搭建一个Vite项目

pnpm create vite

在创建出的文件夹下下载依赖cnpm i:然后pnpm run dev即可

vite.config.js

import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'
import { resolve } from 'path'

// https://vitejs.dev/config/
export default defineConfig({
  plugins: [vue()],
  resolve: {
    alias: {
      '@': resolve(__dirname, './src')
    }
  }
})

2.3、路由使用

1.创建文件夹用来容纳 页面views与路由规则router

2. 新建路由页面

3.配置路由规则--与下载路由

pnpm install --save vue-router@4

如果报错===》下载时不用携带后面的@4

4 设置路由出口

在app.vue中设置 router-view

5 注入路由

在main.js中引用使用路由

import router from './router'

createApp(App).use(router).mount('#app')

2.4、vuex

1.下载:pnpm install --save vuex

2.创建对应容纳文件夹 store

3.编写vuex相关内容

在store/index.js中创建

import { createStore } from 'vuex'

export default createStore({
  state: {
  },
  getters: {
  },
  mutations: {
  },
  actions: {
  },
  modules: {
  }
})

4.在项目中配置vuex

import store from './store'

createApp(App).use(store).use(router).mount('#app')

三、pinia

pinia是一个用于vue的状态管理库,类似于vuex,是vue的另一种状态管理工具

Pinia意为菠萝,表示与菠萝一样,由很多小块组成。在pinia中,每个store都是单独存在,一同进行状态管理。 很多人也将pinia称为vuex5,因为pinia将作为vue3推荐的状态管理库,而vuex将不再迭代。

3.1、与vuex有什么不同

与 Vuex 相比,Pinia 提供了一个更简单的 API,具有更少的规范,提供了 Composition-API 风格的 API,最重要的是,在与 TypeScript 一起使用时具有可靠的类型推断支持

1.mutations 不再存在。

2.无需创建自定义复杂包装器来支持 TypeScript,所有内容都是类型化的,并且 API 的设计方式尽可能利用 TS 类型推断。

3.不再需要注入、导入函数、调用函数、享受自动完成功能!

4.无需动态添加 Store,默认情况下它们都是动态的

5.不再有 modules 的嵌套结构

安装(仅限于vue3)

通过你喜欢的包管理器安装

pnpm install pinia    yarn add pinia    npm install --save pinia

3.2、pinia基本使用

1.创建pinia实例并挂载

在main.ts中

import App from './App.vue'
// 引用
import {createPinia } from 'pinia'
// 创建Pinia实例
const Pinia = createPinia()
// 挂载pinia
createApp(App).use(Pinia).mount('#app')

2.在src目录下新建一个stroe文件夹,在文件夹中新建一个index.ts

3.通过import将下载好的pinia引入到index.ts中并导出 并且使用defineStore创建store对象

import { defineStore } from 'pinia'
// 第一个参数是应用程序中 store 的唯一 id
export const useStore = defineStore('main', {
 
})

3.3、pinia--state

state 是 store 的核心部分。 我们通常从定义应用程序的状态开始。 在 Pinia 中,状态被定义为返回初始状态的函数。 Pinia 在服务器端和客户端都可以工作。

1.创建state

import { defineStore } from 'pinia'

// useStore 可以是 useUser、useCart 之类的任何东西
// 第一个参数是应用程序中 store 的唯一 id
export const useStore = defineStore('main', {
  state:()=>{//创建状态
    return {
        text:"我是pinia的一个状态变量"
    }
  }
})

2.组件中使用

<template>
  <div>
    <!-- 3.使用 -->
    我是测试pinia的组件--{{store.text}}
  </div>
</template>

<script lang="ts" setup>
// 1.引用
import {useStore} from "../store/index"
// 2.创建
let store=useStore()
</script>

3.4、pinia--修改--action

修改方式1

1.组件内创建触发

调用修改方法 store.你在pinia中actions中创建的修改函数

<template>
  <div>
   
    我是测试pinia的组件--{{store.text}}
    <button @click="update()">点我修改</button>
  </div>
</template>

<script lang="ts" setup>
import {useStore} from "../store/index"
let store=useStore()

let update=()=>{
    // 调用修改方法 store.你在pinia中actions中创建的修改函数
    store.updatetext()
}
</script>

2.pinia中创建修改方法

import { defineStore } from 'pinia'
export const useStore = defineStore('main', {
  state:()=>{
    return {
        text:"我是pinia的一个状态变量"
    }
  },
  actions:{
    updatetext(){//修改方法
        this.text="我变了"
    }
  }
})

修改方式2--$patch

$patch是pinia的内置方法 通过该方法可以直接修改state的数据

方式1:在组件内调用$parch 便可直接修改数据

let update=()=>{
    store.$patch({
    		//你要修改state的数据: 你要修改的value值
        text:"我是$patch直接修改"
    })
}

方式2

let update=()=>{
    store.$patch((state)=>{
        console.log(state)
        state.text="你又被改了"
    })
}

pinia--修改常见问题

<template>
  <div>
    
    我是测试pinia的组件--{{text}}
    <button @click="update()">点我修改</button>
  </div>
</template>

<script lang="ts" setup>

import {useStore} from "../store/index"

import {storeToRefs} from "pinia"

let store=useStore()

// 解构取值
// let {text}=store
// storeToRefs 让数据快去取出 并且不丢失响应式
let {text}=storeToRefs(store)

let update=()=>{
    // 调用修改方法 store.你在pinia中actions中创建的修改函数
    store.updatetext()
}
</script>

3.5、pinia--重置数据--$reset

顾名思义就是让数据恢复成state的初始值

<template>
  <div>
    我是测试pinia的组件--{{store.text}}
    <button @click="update()">点我修改</button>
    <button @click="reset()">点我恢复初始值</button>
  </div>
</template>

<script lang="ts" setup>
import {useStore} from "../store/index"
let store=useStore()
let update=()=>{
    store.updatetext()
}
let reset=()=>{
    // $reset
    store.$reset()
}
</script>

3.6、pinia--监听数据修改--$subscribe

$subscribe 监听store数据修改 当数据改变了 那么subscribe也会触发

<template>
  <div>
    我是测试pinia的组件--{{store.text}}
    <button @click="update()">点我修改</button>
  </div>
</template>

<script lang="ts" setup>

import {useStore} from "../store/index"

let store=useStore()

let update=()=>{
    store.updatetext()
}
// 监听store数据修改
let sub=store.$subscribe((params,state)=>{
  console.log("params",params);
  console.log("state",state);
})
</script>

3.7、pinia--处理异步操作--action

在pinia中acition不但能处理同步操作 同样也可以处理异步操作

使用方式和之前一致

<template>
  <div>
    我是测试pinia的组件--{{store.text}}
    <button @click="demoAxios()">点我获取异步数据</button>
  </div>
</template>

<script lang="ts" setup>

import {useStore} from "../store/index"

let store=useStore()

let demoAxios=()=>{
    store.link()
}

</script>
import { defineStore } from 'pinia'

import $http from "axios"

export const useStore = defineStore('main', {
  state:()=>{
    return {
        text:"我是pinia的一个状态变量"
    }
  },
  actions:{
   async link(){
    try {
      let data= await $http({
        url:"http://localhost:8888/userlist/demoget",
        method:"get"
      })
      console.log(data.data.data.name)

      this.text=data.data.data.name

    } catch (error) {
      console.log("失败")
    }
    }
  }
})

3.8、pinia--getters

import { defineStore } from 'pinia'
export const useStoreb = defineStore('mainb', {
  state:()=>{
    return {
        text:"abcdefg"
    }
  },
  actions:{
  
  },
  getters:{
    newtext():any{  
        return this.text.toUpperCase()
    }
  }
})

3.9、pinia--模块化

pinia中定义模块 只需要定义多个store即可 因为pinia没有单一数据源这个概念 在其中可以定义多个store对象

<template>
  <div>
    我是测试pinia的组件--{{storeone.text}}---{{storetwo.text}}
  </div>
</template>
<script lang="ts" setup>
// 引用第一个store
import {useStore} from "../store/index"
// 引用第2个store
import {useStoreb} from "../store/indexb"
let storeone=useStore()

let storetwo=useStoreb()
</script>

  • 13
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 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
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值