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

相关文章

  • JS中parseInt()和map()用法分析

    JS中parseInt()和map()用法分析 parseInt() parseInt()是一个全局函数,用于解析字符串并返回整数。该函数接受两个参数:要解析的字符串和一个表示解析进制的参数。 parseInt(string, radix) 其中,string是要转换的字符串,radix是一个可选参数,表示要解析的字符串的进制数。 如果省略radix参数,则…

    JavaScript 2023年5月28日
    00
  • javascript prototype的深度探索不是原型继承那么简单

    下面我将为你详细讲解“Javascript Prototype的深度探索不是原型继承那么简单”的完整攻略。 一、了解prototype 在Javascript中,每个对象都有一个prototype属性,这个属性指向了它所对应的构造函数的原型对象(也称为原型),也是实现JavaScript中原型继承的关键。 示例代码: function Person(name…

    JavaScript 2023年6月10日
    00
  • SpringBoot集成百度AI实现人脸识别的项目实践

    SpringBoot集成百度AI实现人脸识别的项目实践 一、背景 人脸识别技术可以应用于各种场景,如安防、门禁、签到等。而百度AI平台提供了一套强大的人脸识别API,可以为开发者提供便捷的人脸识别功能。同时,SpringBoot作为目前流行的微服务框架,具有极强的开发易用性和扩展性。本文将介绍如何通过SpringBoot集成百度AI实现人脸识别的项目实践。 …

    JavaScript 2023年6月11日
    00
  • JavaScript函数中this指向问题详解

    下面就为您详细讲解“JavaScript函数中this指向问题详解”的完整攻略。 JavaScript函数中this指向问题详解 在JavaScript中,函数的this指向经常导致开发人员困惑。本文将详细介绍JavaScript中函数的this指向问题。了解这些概念和最佳实践有助于轻松编写高效的JavaScript代码。 什么是this? 在JavaScr…

    JavaScript 2023年6月10日
    00
  • html格式化json的实例代码

    以下是 html 格式化 JSON 的实例代码的完整攻略。 如何格式化 JSON 什么是 JSON JSON 是一种用于数据交换的轻量级文本格式。它基于 JavaScript 对象表示法(JavaScript Object Notation)。JSON 最初由 Douglas Crockford 发明,现在已经成为 Web 应用程序中的常用格式。 JSON …

    JavaScript 2023年5月27日
    00
  • Javascript写入txt和读取txt文件示例

    当需要在网页中操作本地文件时,我们可以使用JavaScript中的File API来实现。 写入txt文件示例 下面是一个将输入框中的文本写入txt文件的示例。 HTML部分 <body> <input type="text" id="input"> <button onclick=&qu…

    JavaScript 2023年5月27日
    00
  • 如何在postman中添加cookie信息步骤解析

    以下是如何在Postman中添加Cookie信息的步骤解析: 打开Postman并进入请求编辑器 在地址栏中输入要请求的网址 点击“Headers”选项卡,然后在“Key”栏中输入“Cookie”并在“Value”栏中输入Cookie信息 此外,除了手动输入Cookie信息之外,还可以通过在Postman中进行登录获取Cookie信息。下面是两个示例: 示例…

    JavaScript 2023年6月11日
    00
  • 推荐20家国外的脚本下载网站

    下面是详细讲解“推荐20家国外的脚本下载网站”的完整攻略: 1. 确定搜索关键词 当我们想要寻找国外的脚本下载网站的时候,搜索引擎是我们的好帮手。我们可以使用以下关键词来搜索: script download sites code download sites javascript libraries download free script downloa…

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