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

详解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日

相关文章

  • Vue.js 2.0学习教程之从基础到组件详解

    首先,本文将介绍一份针对Vue.js 2.0的学习教程,包括从基础开始,逐步介绍Vue.js的概念和用法,最终深入到Vue.js组件的详细讲解。 一、Vue.js基础 1.1 Vue.js的基本概念和语法 在Vue.js中,最核心的概念是“响应式”,通过将对象代理到Vue实例上,使得当对象改变时,Vue实例能够监听到并动态更新相应的视图。另外,Vue.js还…

    JavaScript 2023年6月10日
    00
  • JSON 入门教程基础篇 json入门学习笔记

    JSON 入门教程基础篇 json入门学习笔记 本文主要介绍JSON的基础知识,包括JSON是什么、JSON的语法格式、如何解析JSON数据等,读者可以通过本文学习到JSON的基础知识并能够进行简单的JSON数据解析。 什么是JSON JSON全称为JavaScript Object Notation,它是一种轻量级的数据交换格式。JSON以纯文本的形式表示…

    JavaScript 2023年5月27日
    00
  • 理解Javascript_03_javascript全局观

    理解Javascript_03_javascript全局观的完整攻略包括以下几个方面: 1. 全局作用域 JavaScript中的全局作用域是指在当前页面所有函数和变量都能访问的范围。当页面被加载时,全局作用域就已经存在,并且在页面生命周期的整个过程中都存在。在全局作用域中定义的变量和函数都是在全局范围内可见的。 2. 全局变量 在全局作用域中声明的变量是全…

    JavaScript 2023年6月10日
    00
  • Javascript实现的SHA-256加密算法完整实例

    Javascript实现的SHA-256加密算法完整实例 SHA-256是一种常用的加密算法,可以对文本进行加密处理,被广泛应用于网络安全、密码学等领域。本文将介绍如何使用javascript语言实现SHA-256加密算法,并提供详细的完整代码实例。 一、SHA-256加密算法基础知识 SHA-256是一种基于哈希加密算法的加密方式,它可以将任意长度的输入信…

    JavaScript 2023年5月19日
    00
  • js 时间格式与时间戳的相互转换示例代码

    下面我来为您介绍 JavaScript 时间格式与时间戳的相互转换攻略。 时间格式和时间戳的概念 在 JavaScript 中,时间可以使用时间戳和时间格式表示。时间戳是一个整数,表示自 1970 年 1 月 1 日 00:00:00 UTC(协调世界时)以来的毫秒数。而时间格式则是人类可读的日期和时间表示法。常见的时间格式有 ISO 格式、标准日期格式和自…

    JavaScript 2023年5月27日
    00
  • javascript实现数字时钟特效

    下面是实现数字时钟特效的完整攻略。 一、准备工作 在开始实现之前,我们需要先搭建一个简单的HTML框架,并且引入jQuery库和一个字体库。 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> &l…

    JavaScript 2023年5月27日
    00
  • JS中的变量作用域(console版)

    下面我将为你详细介绍“JS中的变量作用域(console版)”的攻略。 什么是变量作用域? 在JS中,变量的作用范围被称为变量作用域。简单来说,就是定义一个变量后,这个变量能够被访问的范围。JS中有全局作用域和局部作用域。全局作用域指的是在整个JS文件中都能够访问的变量,而局部作用域则指的是在函数中定义的变量,在函数外面是无法访问到的。 如何判断变量作用域?…

    JavaScript 2023年5月28日
    00
  • js日历相关函数使用详解

    JS日历相关函数使用详解 背景 很多网站需要使用日历组件来提供日期输入的功能。而JavaScript日历组件则是一种极为常见和方便的实现方式。本篇文章将介绍如何使用JavaScript实现一个日历组件,并详细介绍日历组件相关的核心函数。 实现 HTML结构 在HTML结构中,我们需要一个用于显示日期的input元素和一个用于显示日历的div元素。示例代码如下…

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