记录下使用vue开发前端

开头

你好!为了不让我第一次开发的服务端孤家寡人,当然是需要配套上前端的

框架的选择

这里选用的是vue3+pinia+ts,之前也是一直用js去写项目,这次改用ts,要跳出舒适圈

创建项目

首先使用vite创建项目

npm create vite@latest my-project -- --template vue-ts
cd my-project

然后安装依赖

# 安装核心依赖
npm install
# 安装 Pinia
npm install pinia

配置 Pinia,在main.ts中配置

import {
    
     createApp } from 'vue'
import {
    
     createPinia } from 'pinia'
import App from './App.vue'

const app = createApp(App)
const pinia = createPinia()

app.use(pinia)
app.mount('#app')

测试pinia

先创建一个store示例,在 stores/counter.ts 中

import {
    
     defineStore } from 'pinia'

export const useCounterStore = defineStore('counter', {
    
    
  state: () => ({
    
    
    count: 0
  }),
  actions: {
    
    
    increment() {
    
    
      this.count++
    }
  }
})

接下来去掉App.vue和components/HelloWorld.vue中多余的内容
App.vue

<script setup lang="ts">
import HelloWorld from './components/HelloWorld.vue'
</script>

<template>
  <HelloWorld msg="Vite + Vue" />
</template>

<style scoped>

</style>

components/HelloWorld.vue

<script setup lang="ts">
import {
    
     useCounterStore } from "../stores/counter";
const counterStore = useCounterStore();
defineProps<{
    
     msg: string }>();

</script>

<template>
  <div>
    <button @click="counterStore.increment">{
    
    {
    
     counterStore.count }}</button>
  </div>
</template>

<style scoped>

</style>

这里通过如下代码成功的调用了store里pinia管理的数据和方法

import {
    
     useCounterStore } from "../stores/counter";
const counterStore = useCounterStore();
counterStore.increment      counterStore.count

但是每次都需要在前面加上counterStore.***去调用,个人习惯用toRefs去解构变量,解构方法(不知有没有什么弊端)如下,也是一样的正常使用

<script setup lang="ts">
import {
    
     toRefs } from "vue";
import {
    
     useCounterStore } from "../stores/counter";
// 使用解构赋值
const counterStore = useCounterStore();
const {
    
     count } = toRefs(counterStore); //变量
const {
    
     increment } = counterStore; //方法
defineProps<{
    
     msg: string }>();
</script>

<template>
  <div>
    <button @click="increment">{
    
    {
    
     count }}</button>
  </div>
</template>

<style scoped></style>

在我的引用中,常常会用到如下直接在src或者config下的文件,麻烦起来前面不知道要加上多少个 …/…/…/

import {
    
     useCounterStore } from "../stores/counter";

所以我做出如下配置
tsconfig.app.json

"compilerOptions": {
    
    
    //原有代码
    "baseUrl": ".",
    "paths": {
    
    
      "@/*": ["./src/*"],
      "_conf/*": ["./config/*"]
    }
  },

vite.config.ts

import {
    
     defineConfig } from "vite";
import vue from "@vitejs/plugin-vue";
import {
    
     fileURLToPath, URL } from "node:url";

// https://vite.dev/config/
export default defineConfig({
    
    
  plugins: [vue()],
  resolve: {
    
    
    alias: {
    
    
      "@": fileURLToPath(new URL("./src", import.meta.url)),
      _conf: fileURLToPath(new URL("./config", import.meta.url)),
    },
  },
});

这里需要安装@types/node

npm install @types/node

然后在项目中就可以这样引用了,路径就等于/src/stores/counter

import {
    
     useCounterStore } from "@/stores/counter";

项目结构设计

src/
├── assets/          # 静态资源
├── components/      # 公共组件
├── router/          # 路由配置
├── stores/          # Pinia 状态管理
├── types/           # TypeScript 类型定义
├── utils/           # 工具函数
├── views/           # 页面组件
├── App.vue          # 根组件
└── main.ts          # 入口文件

安装路由

npm install vue-router@4

然后在main.ts引入

import {
    
     createApp } from "vue";
import {
    
     createPinia } from "pinia";
import router from "./router";

import App from "./App.vue";

const app = createApp(App);
const pinia = createPinia();

app.use(pinia);
app.use(router);

app.mount("#app");

在views中创建Home和About两个vue文件,内容随意,然后在router里创建index.ts

import {
    
     createRouter, createWebHashHistory } from "vue-router";

const router = createRouter({
    
    
  history: createWebHashHistory(),
  routes: [
    {
    
    
      path: "/About",
      name: "About",
      component: () => import("@/views/About.vue"),
    },
    {
    
    
      path: "/Home",
      name: "Home",
      component: () => import("@/views/Home.vue"),
    },
  ],
});

export default router;

最后在App.vue中修改代码,到这路由就算配置完成了

<script setup lang="ts">
</script>

<template>
  <nav>
    <router-link to="/Home">Home</router-link> |
    <router-link to="/about">About</router-link>
  </nav>
  <RouterView />
</template>

<style scoped>

</style>

结尾

用于记录,有错就改,没错也改

猜你喜欢

转载自blog.csdn.net/qq_54049842/article/details/146182219
今日推荐