详解vite+ts快速搭建vue3项目以及介绍相关特性

yizhihongxing

详解vite+ts快速搭建vue3项目以及介绍相关特性

概述

在本篇教程中,我们将详细讲解使用vite和typescript快速搭建Vue3项目的步骤,并介绍Vue3的相关特性。

准备工作

在开始之前,需要确保你已经安装了node.js和npm包管理器。如果你没安装,可以前往官网下载安装程序。

创建项目

步骤如下:
1. 打开终端,进入你想要创建项目的目录。
2. 运行以下命令创建Vue3项目:

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

其中,my-vue-project是你的项目名称,也可以使用其他名称,vue-ts为vite提供的Vue3+typescript模板,您可以在此处选择您要用的其他模板。运行该命令后,将会下载所有依赖项并创建vue3项目的初始文件结构。

运行项目

步骤如下:
1. 进入项目目录,运行以下命令:

npm install

这将安装项目的所有依赖项。

  1. 运行以下命令启动开发服务器:
npm run dev

在终端中查看输出,找到“Local:”行,里面描述了您应该在浏览器中输入的URL地址。现在,您可以打开浏览器并输入该地址,以查看项目。

项目结构分析

下面我们来看一下创建Vue3项目后的文件结构:

  • public/目录:包含了一些和项目构建无关的静态资源,比如不需要被webpack处理的图片。
  • src/目录:项目的主要代码存放目录,所有的Vue组件、页面以及其他的代码都应该位于此目录下。
  • App.vue:根组件。
  • main.ts:项目入口文件,创建了Vue实例。
  • components/目录:存放Vue组件。
  • views/目录:存放页面组件。
  • package.json文件:项目中使用的依赖列表、命令脚本等都记录在此处。

Vue3的相关特性

现在我们来介绍Vue3的两个重要特性:
1. Composition API
2. Teleport

Composition API

Composition API是Vue3中的新特性之一。它提供了一种基于函数的API,使得组件更容易维护和重用,而不是像Vue2一样使用Options API。

一些常用的核心函数包括:reactive、ref、watchEffect、watch等。我们可以通过定义一个对象,然后把对象中的属性定义为Ref对象或reactive对象,实现响应式。例如:

import { reactive, ref } from 'vue';

interface State {
  count: number
  message: string
}

export default function useMessage(): {[key: string]: any} {
  const state = reactive<State>({
    count: 0,
    message: '',
  });

  const countRef = ref(state.count);

  return {
    state,
    countRef,
  }
}

Teleport

Teleport是Vue3中的另一个新特性,它是一种Portal技术的实现,允许我们把组件的DOM在父组件之外渲染,而不必担心CSS样式的影响。

使用Teleport需要在组件中添加Teleport组件。以下是一个简单的例子:

<template>
  <div>
    <button @click="show = !show">Toggle Popup</button>

    <teleport
      to="body"
    >
      <div
        v-if="show"
        class="popup"
      >
        <h2>Popup</h2>
        <p>Popup content</p>
      </div>
    </teleport>
  </div>
</template>

<script>
import { reactive } from 'vue';

export default {
  name: 'ComponentWithTeleport',
  setup() {
    const state = reactive({
      show: false,
    })

    return state;
  },
}
</script>

<style>
.popup {
  background-color: white;
  border: 1px solid gray;
  position: absolute;
  top: 50%;
  left: 50%;
  transform: translate(-50%, -50%);
  padding: 1em;
}
</style>

示例说明

下面演示如何使用Composition API和Teleport。

示例1

在项目中创建一个名为Example1.vue的组件,并使用Composition API实现以下功能:
1. 定义一个响应式状态isShowing,初始值为false
2. 当用户单击按钮时,将isShowing状态切换为相反的值。

<template>
  <div>
    <button @click="toggle">Toggle Button</button>
    <teleport to="body">
      <div v-if="isShowing" class="popup">
        <h2>Popup</h2>
        <p>Popup content</p>
      </div>
    </teleport>
  </div>
</template>

<script lang="ts">
import { reactive, defineComponent } from 'vue';

export default defineComponent({
  setup() {
    const state = reactive({
      isShowing: false,
    });

    const toggle = () => {
      state.isShowing = !state.isShowing;
    }

    return {
      ...state,
      toggle,
    };
  }
})
</script>

示例2

在项目中创建一个名为Example2.vue的组件,并通过Teleport实现以下功能:
1. 把组件的DOM在父组件之外渲染。
2. 提供一个按钮,单击时弹出modal。
3. modal中有表单和关闭按钮,另外增加一个“确认”按钮,单击时弹出输入框的值。

<template>
  <div>
    <button @click="isShowing = true">Show Modal</button>

    <teleport to="body">
      <div class="modal" v-if="isShowing">
        <div class="modal-overlay" @click="isShowing = false"></div>
        <div class="modal-dialog">
          <form @submit.prevent="submit">
            <label for="name">Your Name:</label>
            <input id="name" type="text" v-model="form.name">

            <button class="modal-close" type="button" @click="isShowing = false">&times;</button>
            <button type="submit">Submit</button>
          </form>
        </div>
      </div>
    </teleport>
  </div>
</template>

<script lang="ts">
import { reactive, defineComponent, Ref } from 'vue';

interface Form {
  name: string
}

export default defineComponent({
  setup() {
    const state = reactive({
      isShowing: false,
      form: {
        name: '',
      },
    });

    const submit = () => {
      alert(state.form.name);
    }

    return {
      ...state,
      submit,
    };
  }
})
</script>

<style>
.modal {
  position: fixed;
  top: 0;
  bottom: 0;
  left: 0;
  right: 0;
}

.modal-overlay {
  position: absolute;
  top: 0;
  bottom: 0;
  left: 0;
  right: 0;
  background-color: rgba(0,0,0,0.5);
}

.modal-dialog {
  position: absolute;
  top: 50%;
  left: 50%;
  transform: translate(-50%, -50%);
  background-color: white;
  padding: 1em;
  border: 1px solid gray;
}

.modal-close {
  position: absolute;
  top: 0;
  right: 0;
  border: none;
  background-color: transparent;
  font-size: 2em;
  cursor: pointer;
}
</style>

以上就是使用vite和typescript快速搭建Vue3项目以及介绍相关特性的完整攻略,包含了两个示例的详细说明。希望本文可以帮助您快速入门Vue3。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:详解vite+ts快速搭建vue3项目以及介绍相关特性 - Python技术站

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

相关文章

  • JavaScript 批量创建数组的方法

    当我们需要创建长度固定、元素重复或特殊规律的数组时,可以使用 JavaScript 的批量创建数组的方法。 使用 Array 构造函数 通过 Array 构造函数的原型方法 Array(n) 可以批量创建长度为 n 的空数组,而调用 fill 原型方法可以为该数组的所有位置填充同一个元素。例如: // 创建一个长度为 5,元素全部为 0 的数组 let ar…

    JavaScript 2023年5月27日
    00
  • javascript实现计时器的简单方法

    下面我将为你详细讲解“Javascript实现计时器的简单方法”的攻略。 前言 在Web应用程序中,我们经常需要实现一些计时相关功能,例如倒计时、计时器等等。Javascript提供了很多实现计时相关功能的方法,其中比较常见的是使用setInterval()函数实现计时器。 实现思路 实现一个计时器的主要思路是:获取计时的开始时间start_time,然后不…

    JavaScript 2023年5月27日
    00
  • js创建对象几种方式的优缺点对比

    那我来讲解一下“js创建对象几种方式的优缺点对比”的攻略。 什么是对象? 在 JavaScript 中,万物皆对象。简单来说,对象就是一种数据类型,它是由一组“键值对”组成的组合数据类型。每个键都是唯一的,其对应的值可以是任何基本类型的数据,还可以是对象、数组等复杂类型的数据。 对象的创建方式 在 JavaScript 中,创建对象的方式有多种,下面分别来介…

    JavaScript 2023年5月27日
    00
  • Javascript Date setMinutes() 方法

    JavaScript 中的 setMinutes() 方法用于设置日期对象的分钟部分。在本教程中,我们将详细介绍 setMinutes() 方法的使用方法。 setMinutes() 方法基本语法如下: date.setMinutes(minValue, [secValue], [msValue]) 其中,minValue 是设置的分钟值,必须是一个介于 0…

    JavaScript 2023年5月11日
    00
  • 浅谈JS的原型和继承

    浅谈JS的原型和继承 1. 原型 在JavaScript中,每个对象都有一个原型对象,它充当了该对象的基础。原型对象是一个普通的对象,用于存储对象所继承的属性和方法。 我们可以使用Object.getPrototypeOf(obj)方法获取一个对象的原型。 var obj = {}; console.log(Object.getPrototypeOf(obj…

    JavaScript 2023年6月10日
    00
  • JS算法教程之字符串去重与字符串反转

    想要讲解“JS算法教程之字符串去重与字符串反转”的完整攻略,需要先来介绍一下这篇文章所要解决的问题,以及需要使用到的一些关键点。 问题描述 这篇文章主要解决两个问题: 字符串去重:给定一个字符串,如何将其中重复的字符去掉,只保留一个。 字符串反转:给定一个字符串,如何将其中的字符反转。 解决思路 为了解决这两个问题,我们需要使用到以下几个步骤: 字符串去重:…

    JavaScript 2023年5月28日
    00
  • JS获取时间的相关函数及时间戳与时间日期之间的转换

    获取时间的相关函数及时间戳与时间日期之间的转换 在JavaScript中,获取时间的方法非常多,包括获取时间戳、获取当前日期时间等。下面我们来依次介绍这些函数。 1.获取时间戳: 时间戳指的是距离1970年1月1日0时0分0秒(UTC时间)的时间差,单位为毫秒。获取时间戳有两种方式: (1) Date.now() 函数 这个函数返回当前时间的时间戳,它等价于…

    JavaScript 2023年5月27日
    00
  • JavaScript lodash常见用法系列小结

    JavaScript Lodash 常见用法系列小结 简介 在 JavaScript 编程中,Lodash是一个非常实用的工具库。它提供了很多实用的方法,可以让我们更方便地进行数组、对象等各种数据操作。 本系列将以实际应用场景为导向,总结 Lodash 常用的功能和用法,并且给出详细的代码示例。 目录 数组操作 对象操作 字符串操作 集合操作 函数式编程 其…

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