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

以下是详细讲解“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日

相关文章

  • javascript中Date对象的使用总结

    下面就是一份详细的“JavaScript中Date对象的使用总结”攻略。 1. 引言 在JavaScript中,Date对象是处理日期和时间的重要组件,它提供了很多常见的日期和时间操作方法。本文将简要介绍Date对象的基本用法和常用方法。 2. 创建Date对象 可以使用new Date()语法创建一个Date对象,表示当前日期和时间: const date…

    JavaScript 2023年5月27日
    00
  • Vue nextTick的原理解析

    Vue.js中的nextTick方法是一个非常有用又有些神秘的工具。其背后的原理和使用方式值得我们深入探究和理解,使我们能够更好地使用Vue.js,写出更加优秀的代码。 什么是nextTick? 在Vue.js中,当我们修改了一个数据后,DOM并不会立刻更新。相反,Vue.js会在内部异步的更新DOM。这种异步更新意味着我们不能马上获取到更新后的DOM,这对…

    JavaScript 2023年6月11日
    00
  • javascript父、子页面交互技巧总结

    JavaScript父、子页面交互技巧总结 在Web开发中,经常需要在父页面和子页面之间进行信息交互,这时就需要用到JavaScript。本文将介绍JavaScript父、子页面交互的几种常见技巧。 通过iframe元素实现父、子页面交互 在父页面中,可以通过iframe元素引入子页面。父页面可以访问子页面中的元素和JavaScript函数,子页面也可以通过…

    JavaScript 2023年6月10日
    00
  • JS实现字符串转驼峰格式的方法

    JS实现字符串转驼峰格式的方法,可以通过使用正则表达式和replace方法来实现。下面是一个完整的攻略: 使用正则表达式和replace方法实现 步骤如下: 通过正则表达式匹配所有需要转换为驼峰格式的字符串。 javascript/[-_]\w/g [-_]表示要匹配的分隔符可以是 – 或 _ ,方括号[]表示单字符匹配 \w表示匹配任何字母数字字符,等价于…

    JavaScript 2023年5月28日
    00
  • JS实现n秒后自动跳转的两种方法

    下面我将针对“JS实现n秒后自动跳转的两种方法”进行详细讲解。 方法一:使用setTimeout()方法 我们可以使用JS的setTimeout()方法来实现n秒后自动跳转,具体操作步骤如下: 在页面中添加JS代码,定义计时器,并使用setTimeout()方法来实现需要跳转的URL地址。 <script> // 设置跳转的URL地址 var t…

    JavaScript 2023年5月27日
    00
  • JavaScript中箭头函数与普通函数的区别详解

    下面是“JavaScript中箭头函数与普通函数的区别详解”的完整攻略。 一、前言 在ES6的时代,随着箭头函数的引入,它逐渐被越来越多的开发者所使用,那么箭头函数和普通函数又有何区别呢?接下来,我们将从诸如函数内部的this、arguments、new、原型等角度来详细讲解两种函数的异同。 二、this 普通函数中的this是由函数的调用方式动态绑定的,而…

    JavaScript 2023年5月27日
    00
  • js 面向对象学习笔记

    关于JS面向对象的学习,我们可以分为以下步骤: 1. 了解什么是面向对象编程 面向对象编程(OOP)是一种编程范式或编程风格,其主要思想是通过类和实例来描述和组织代码,将数据和行为封装在对象内部,对外提供接口进行访问和操作。 2. 学习面向对象的基本术语 在 OOP 中,有以下基本概念需要了解: 类(Class):定义对象的属性和方法的蓝图 对象(Objec…

    JavaScript 2023年5月18日
    00
  • 如何在JS中实现相互转换XML和JSON

    以下是如何在JS中实现相互转换XML和JSON的完整攻略: 将XML转换为JSON格式 在JS中,将XML格式的数据转换为JSON格式的数据,可以使用第三方库:xml2json。该库可以通过npm进行安装: npm install xml2json –save 安装完成后,就可以在JS代码中使用该库进行XML和JSON格式的转换了。下面是一个使用xml2j…

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