5分钟快速搭建vue3+ts+vite+pinia项目

yizhihongxing

以下是详细讲解“5分钟快速搭建vue3+ts+vite+pinia项目”的完整攻略。

1. 创建项目

首先,我们需要先安装 Node.js 和 npm 包管理器,然后通过 npm 在命令行中执行以下命令来创建一个新的 Vue 3 TypeScript 项目:

npm init vite@latest my-project --template vue-ts

其中,my-project 是你想要创建的项目名称,--template vue-ts 参数指定了使用 Vite 进行快速搭建,同时使用 Vue 3 和 TypeScript。

创建项目后,通过以下命令进入项目目录:

cd my-project

2. 安装和配置 Pinia

接下来,我们需要在项目中添加状态管理库 Pinia。使用以下命令来安装 Pinia:

npm i pinia

然后,我们需要配置 Pinia,以便在项目中使用。在 src 目录下创建一个名为 store.ts 的新文件,并添加以下内容:

import { createPinia } from 'pinia'

export const store = createPinia()

该文件将创建一个新的 Pinia 实例,可以用来定义我们的状态管理逻辑。

3. 编写示例代码

接下来,让我们来编写一些示例代码来测试我们的项目是否正常工作。在 src 目录下创建一个名为 App.vue 的新文件,并添加以下内容:

<template>
  <div>
    <h1>{{ message }}</h1>
    <button @click="increment">Increment</button>
    <p>Count: {{ count }}</p>
  </div>
</template>

<script lang="ts">
import { defineComponent } from 'vue'
import { useStore } from '../store'

export default defineComponent({
  name: 'App',
  setup() {
    const store = useStore()
    const count = store.state.count
    const increment = () => store.state.count++

    return {
      count,
      increment,
      message: 'Hello Vue 3 + TypeScript + Vite + Pinia!'
    }
  }
})
</script>

在上面的代码中,我们定义了一个名为 App 的组件,并使用 useStore 函数从 store.ts 中导入 store。包含了一个简单的计数器并展示了一个问候语。

最后,我们需要在 main.ts 中引入 Pinia 并创建实例:

import { createApp } from 'vue'
import App from './App.vue'
import { store } from './store'

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

4. 运行项目

现在,我们可以运行项目并看到它的效果了!使用以下命令:

npm run dev

运行成功后,在浏览器中打开 http://localhost:3000/,你应该能够看到一个简单的计数器和问候语。

5. 示例说明

接下来,我将分别说明两个例子,展示了如何在 Pinia 中管理状态。

示例一:计数器

我们来看一个简单的计数器的例子。在 store.ts 中添加以下内容:

import { createPinia } from 'pinia'

export const store = createPinia({
  state: () => ({
    count: 0
  }),
  actions: {
    increment() {
      this.count++
    }
  }
})

在这个例子中,我们定义了一个 count 状态,同时添加了一个 increment 的 action 来增加计数器的值。在 App.vue 中使用该计数器:

<template>
  <div>
    <h1>{{ message }}</h1>
    <button @click="increment">Increment</button>
    <p>Count: {{ count }}</p>
  </div>
</template>

<script lang="ts">
import { defineComponent } from 'vue'
import { useStore } from '../store'

export default defineComponent({
  name: 'App',
  setup() {
    const store = useStore()
    const count = store.state.count
    const increment = () => store.actions.increment()

    return {
      count,
      increment,
      message: 'Hello Vue 3 + TypeScript + Vite + Pinia!'
    }
  }
})
</script>

示例二:Todo list

我们来看一个更复杂的 Todo list 的例子。在 store.ts 中添加以下内容:

interface Todo {
  id: number;
  title: string;
  completed: boolean;
}

export const store = createPinia({
  state: () => ({
    todos: [] as Todo[],
    nextId: 1
  }),
  actions: {
    add(title: string) {
      this.todos.push({
        id: this.nextId++,
        title,
        completed: false
      })
    },
    remove(id: number) {
      this.todos = this.todos.filter(todo => todo.id !== id)
    },
    complete(id: number) {
      const todo = this.todos.find(todo => todo.id === id)
      if (todo) todo.completed = true
    }
  }
})

在这个例子中,我们定义了一个 todos 状态,同时添加了 add, remove, 和 complete actions 来新增、删除、和完成 todo 的操作。

App.vue 中使用该 Todo list:

<template>
  <div>
    <h1>{{ message }}</h1>
    <form @submit.prevent="addTodo">
      <input type="text" v-model="newTodo" />
      <button type="submit">Add</button>
    </form>
    <ul>
      <li v-for="todo in todos" :key="todo.id">
        <input type="checkbox" v-model="todo.completed" />
        {{ todo.title }}
        <button @click="remove(todo.id)">x</button>
      </li>
    </ul>
  </div>
</template>

<script lang="ts">
import { defineComponent, reactive, ref } from 'vue'
import { useStore } from '../store'

interface NewTodo {
  title: string;
}

export default defineComponent({
  name: 'App',
  setup() {
    const store = useStore()
    const state = reactive({ newTodo: '' })
    const todos = ref(store.state.todos)

    const addTodo = () => {
      store.actions.add(state.newTodo)
      state.newTodo = ''
    }

    const remove = (id: number) => {
      store.actions.remove(id)
    }

    return {
      todos,
      addTodo,
      remove,
      ...state,
      message: 'Hello Vue 3 + TypeScript + Vite + Pinia!'
    }
  }
})
</script>

总结

这就是如何使用 Vue 3, TypeScript, Vite 和 Pinia 快速搭建一个简单的项目的完整攻略。欢迎通过这个教程来体验一下 Pinia 这个新的状态管理库。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:5分钟快速搭建vue3+ts+vite+pinia项目 - Python技术站

(0)
上一篇 2023年6月11日
下一篇 2023年6月11日

相关文章

  • js中如何完美的解析数据

    首先,在JavaScript中解析数据的主要方式是使用JSON对象。JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,易于阅读和编写,被广泛用于Web应用程序中的数据传输。以下是解析数据的完整攻略: 使用JSON.parse()方法解析数据 通过使用JavaScript的JSON.parse()方法,可以将一个字符串…

    JavaScript 2023年5月27日
    00
  • js下写一个事件队列操作函数

    下面是详细讲解“js下写一个事件队列操作函数”的完整攻略。 什么是事件队列? 事件队列是 JavaScript 中用于管理异步任务的机制。异步任务例如 Ajax 请求、setTimeout、setInterval 等,这些任务会在一个单独的线程中执行,不会与页面渲染等同步任务同时进行,因此对于编写高效、优化的 JavaScript 代码十分重要。 编写一个事…

    JavaScript 2023年5月28日
    00
  • 不使用script导入js文件的几种方法

    当我们需要在网页中引入JS文件时,一般会使用<script>标签来实现,但有时我们也需要不使用<script>标签来实现,以下是几种不使用<script>标签导入JS文件的方法: 1. 使用Link标签: 我们可以使用<link>标签的href属性来链接JS文件,这种方式一般用于引入CSS文件,但是也可以用于J…

    JavaScript 2023年5月27日
    00
  • Qiankun Sentry 监控异常上报无法自动区分项目解决

    完整攻略如下: Qiankun Sentry 监控异常上报无法自动区分项目解决 问题描述 在使用 Qiankun 进行微前端架构开发时,可能会出现 Sentry 监控异常上报无法自动区分项目的问题。具体表现为:在一个微应用抛出异常,异常信息被上报到了主应用的 Sentry 中,而无法定位到哪个微应用抛出了异常。 原因分析 这个问题的根本原因是 Sentry …

    JavaScript 2023年5月28日
    00
  • js实现登录时记住密码的方法分析

    js实现登录时记住密码的方法分析 在许多网站的登录页面中,都提供了“记住密码”的功能,用户在勾选该选项后,下次登录时可以自动填充用户名和密码,方便了用户的登录操作。本文将介绍如何使用js实现这一功能,涉及到cookie和localStorage两种方法。 1. 使用cookie实现记住密码功能 1.1 设置cookie 在用户登录成功后,可以使用js将用户名…

    JavaScript 2023年6月11日
    00
  • Javascript和Java获取各种form表单信息的简单实例

    下面是我对“Javascript和Java获取各种form表单信息的简单实例”的攻略: 简介 在web开发中,表单是经常使用的元素之一,通常在提交表单之前需要获取表单中用户输入的信息进行验证或者提交。Javascript和Java都可以很方便地获取表单中的信息。 获取表单信息的方式 Javascript获取表单信息 Javascript获取表单信息可以通过D…

    JavaScript 2023年6月10日
    00
  • JS+Canvas绘制抽奖转盘

    下面是详细讲解“JS+Canvas绘制抽奖转盘”的完整攻略: 一、准备工作 创建 HTML 文件并引入 Canvas(例如:) 获取 Canvas 对象,创建绘图上下文和 Canvas 尺寸 定义需要用到的变量(例如:奖项,概率,角度,旋转速度等) 二、绘制转盘基本结构和奖项 绘制转盘外圆和内圆 绘制奖项扇形,并填充不同的颜色 三、转盘动画 绑定旋转事件(例…

    JavaScript 2023年6月11日
    00
  • jQuery.validate.js表单验证插件的使用代码详解

    那我就来详细讲解一下“jQuery.validate.js表单验证插件的使用代码详解”的攻略吧。 什么是jQuery.validate.js表单验证插件? jQuery.validate.js是一个jQuery的表单验证插件,它可以方便地实现表单输入内容的合法性检测和提示。 如何引入jQuery.validate.js? 在使用jQuery.validate…

    JavaScript 2023年6月10日
    00
合作推广
合作推广
分享本页
返回顶部