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

相关文章

  • JavaScript中消除闭包的一般方法介绍

    JavaScript中的闭包是一个常见的概念,闭包在一定程度上可以提高程序的可读性、可维护性和可扩展性。但是,闭包也可能导致内存泄漏和性能问题。在一些情况下,我们可能需要消除闭包,以保障程序的健壮性。接下来,本文将介绍几种消除闭包的一般方法。 方法1:使用let和const关键字 在ES6中,新增了let和const关键字,可以有效地消除闭包造成的内存泄漏问…

    JavaScript 2023年6月11日
    00
  • Javascript获取当前日期的农历日期代码

    获取当前日期的农历日期是一个常见的操作,下面是使用JavaScript实现的简要攻略: 步骤一:引入相关的JavaScript库 为了实现农历日期的获取,需要使用一些现成的JavaScript库,比如:lunar-calendar-js。通过在HTML中引入这个库,可以在JavaScript中使用它提供的方法来进行日期的转换。 代码示例: <!DOCT…

    JavaScript 2023年5月27日
    00
  • “前端”工匠系列(一):合格的工匠,究竟该搞什么 | 京东云技术团队

    作者:京东零售 刘伟东 此文为系列文章第一篇,为浅尝辄止的引入,目的是为了让前端从业人员及非从业但是对此领域感兴趣的人对于”前端“是干什么的这个话题有个无门槛的了解。 “前端职能是什么” 说起”前端”,维基百科对这个技术角色的定位是“前端(英語:front-end)和后端(英語:back-end)是描述进程开始和结束的通用词汇。 前端作用于采集输入信息,后端…

    JavaScript 2023年5月5日
    00
  • js获得参数的getParameter使用示例

    当我们开发一个需要传参的JavaScript网页时,经常需要从URL中获取传递的参数。而getParameter就是一种常用的JS函数来用于获取参数值的方法。 下面是getParameter的具体使用方法及示例说明: 1. getParameter使用方法 getParameter的基本使用方法是:获取URL参数的值使用“?”作为分隔符,不同的参数之间用“&…

    JavaScript 2023年6月11日
    00
  • js截取中英文字符串、标点符号无乱码示例解读

    下面是关于“js截取中英文字符串、标点符号无乱码”这一问题的完整攻略。 问题概述 在使用JavaScript开发页面时,经常会遇到需要截取字符串的情况,在截取中英文混合的字符串时,可能会遇到中文字符部分被截断而造成乱码的问题,同时标点符号可能也会被当作一般的字符进行处理,导致无法正确截取。本文将为大家提供解决这些问题的方法和例子。 解决方法 方法一:使用正则…

    JavaScript 2023年5月28日
    00
  • js数组去重的常用方法总结

    好,下面是关于“js数组去重的常用方法总结”的完整攻略。 js数组去重的常用方法总结 一、利用Set去重 ES6新增了Set容器,可以创建一个不重复的集合。因此,利用Set可以快速去重,代码如下: const arr = [1, 2, 3, 3, 4, 5, 4]; const result = Array.from(new Set(arr)); // [1…

    JavaScript 2023年5月27日
    00
  • javascript 二进制运算技巧解析

    JavaScript 二进制运算技巧解析 JavaScript 中有一些二进制运算符可以用来操作数值的二进制形式,包括按位与、按位或、按位异或、左移、右移、无符号右移等。这些运算符可以用于进行一些高效的位运算操作,下面将会为大家详细讲解这些二进制运算技巧的使用方法及示例。 按位与(&)运算符 按位与运算符的符号为“&”,对于两个二进制位数,若…

    JavaScript 2023年5月19日
    00
  • fastclick插件导致日期(input[type=”date”])控件无法被触发该如何解决

    首先,需要梳理一下问题的背景和现象: 背景:当网页中使用了fastclick插件时 现象:用户在点击日期选择控件时,控件无法弹出日期选择框,无法选择日期。 这是因为fastclick插件会阻止浏览器默认的双击事件(有些日期选择控件在点击两次时才能弹出)和移动端的300ms延迟,从而提升点击体验。然而这个插件的实现方式是,将点击事件改为tap事件,从而可能会对…

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