Vue3+Vite 之 从0到1搭建系统 - Part 2

记录Vue3 + Vite 从 0 到 1 搭建系统的过程。系列文章:

【1】Vue3+Vite 之 从0到1搭建系统 - Part 1

本章节主要记录Vue-Router 和 Pinia 的安装使用,如果Part 1创建项目时已经选择配置好了的,本章节可忽略。

Vue-Router

步骤

第一步:安装vue-router

css 复制代码
npm i vue-router@4

第二步:在src目录下创建router文件夹,并新建index.js文件存放相关路由信息。

第三步:index.js 配置路由

js 复制代码
import { createRouter, createWebHistory } from 'vue-router'
const routes = [
  {
    path: "/home",
    component: () => import("@/views/home/index.vue"),
    name: "Home",
  }
];

const router = createRouter({
  history: createWebHistory(),
  routes: routes
  
});

export default router;

main.js 引用router

js 复制代码
import { createApp } from 'vue'
import router from './router'

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

关于VueRouter v3 和 v4 的区别

Vue2使用VueRouter用的是v3版本的Router,而Vue3使用的是v4版本的,在使用过程中发现了一些不一样的用法。总结一下。 更多可见VueRouter官网

路由模式
  1. 创建路由不再使用 new Router(),而是引入调用createRouter()方法。
  2. 路由模式从mode改为history, 值也发生变化。
V3 V4
history createWebHistory()
hash createWebHashHistory()
abstract createMemoryHistory()
路由跳转

组件跳转方式没有什么变化,主要是编程式导航这块,如果使用组合式API,则需要通过调用useRouter()来访问路由器。还可以通过调用useRoute()来获取路由信息。

js 复制代码
import { useRouter, useRoute } from 'vue-router'

export default {
  setup() {
    const router = useRouter()
    const route = useRoute()

    function pushWithQuery(query) {
      router.push({
        name: 'search',
        query: {
          ...route.query,
          ...query,
        },
      })
    }
  },
}

Pinia🍍

Vue最新官网中,将Vue的状态管理库从Vuex改为Pinia。Pinia对Vue2和Vue3都有用。与传统的 Vuex 不同,Pinia 不依赖于全局对象,而是通过创建独立的 store 实例来管理状态。

步骤

第一步:安装

css 复制代码
npm i pinia

第二步:在src目录下,创建stores文件夹,并新建counter.js文件

第三步:创建实例

js 复制代码
// main.js
+ import { createPinia } from 'pinia'
+ const pinia = createPinia()
+ app.use(pinia)

第四步:创建仓库

js 复制代码
// counter.js
import { defineStore } from "pinia"

// store 是用 defineStore 定义的
// 第一个参数是独一无二的,是Store的唯一ID【必传】
// 第二个参数可接受 Setup函数 或 Option对象
// Options🌰:
export const useCounterStore = defineStore('counter', {
  state: () => ({ count: 0 }),
  getters: {
    double: (state) => state.count * 2,
  },
  actions: {
    increment() {
      this.count++
    },
  },
})
// Setup🌰:
import { ref, computed } from 'vue'
export const useCounterStore = defineStore('counter', () => {
  const count = ref(0)
  const doubleCount = computed(() => count.value * 2)
  function increment() {
    count.value++
  }

  return { count, doubleCount, increment }
})

使用Store

js 复制代码
<script setup>
import { useCounterStore } from '@/stores/counter'
import { storeToRefs } from 'pinia'

// 可以在组件中的任意位置访问 `store` 变量 ✨
const store = useCounterStore()
// store不能直接解构,会破坏响应性,需要使用storeToRefs()
const { name, doubleCount } = storeToRefs(store)
</script>

Vuex、Pinia对比

Vuex Pinia
state ref 和 reactive 创建的响应式数据
getters computed 创建的计算属性
mutations 、 actions 普通函数
相关推荐
小白学前端6661 小时前
React Router 深入指南:从入门到进阶
前端·react.js·react
苹果醋31 小时前
React系列(八)——React进阶知识点拓展
运维·vue.js·spring boot·nginx·课程设计
web130933203981 小时前
前端下载后端文件流,文件可以下载,但是打不开,显示“文件已损坏”的问题分析与解决方案
前端
王小王和他的小伙伴1 小时前
解决 vue3 中 echarts图表在el-dialog中显示问题
javascript·vue.js·echarts
outstanding木槿2 小时前
react+antd的Table组件编辑单元格
前端·javascript·react.js·前端框架
好名字08212 小时前
前端取Content-Disposition中的filename字段与解码(vue)
前端·javascript·vue.js·前端框架
隐形喷火龙2 小时前
element ui--下拉根据拼音首字母过滤
前端·vue.js·ui
m0_748241123 小时前
Selenium之Web元素定位
前端·selenium·测试工具
风无雨3 小时前
react杂乱笔记(一)
前端·笔记·react.js
前端小魔女3 小时前
2024-我赚到自媒体第一桶金
前端·rust