创建你的第一个 Vue3 项目——Vue 教程

lxf2023-05-05 05:37:01

Vue3 不知不觉已经来了2-3年了,出个教程吧~为了jym更好的找工作,也为了自己。

开发人员长期以来一直在等待[Vue3 宣布的真正牛叉的功能]例如 Typescript 支持、大型项目的更好组织以及为更好的 Vue 应用程序打造的渲染优化。

在本 Vue3 教程中,我们将构建一个搜索系统,该系统使用文本输入从数组中过滤文章。

在本教程结束时,您将创建一个 Vue3 项目,并使用 Composition API 构建两个组件

接下来是将要实现的功能

创建你的第一个 Vue3 项目——Vue 教程

这是已完成的代码库(包括所有 CSS 样式)的链接。

好吧,我相信你和我一样兴奋,所以让我们开始编码吧。

入门

将 Vue3 添加到您现有的项目或创建您自己的 Vue3 项目有几个不同的选项。

在本教程中,我们将介绍我个人最喜欢的两个选项:

  1. Vue CLI
  2. Vite

Vue CLI

如果您过去做过 Vue 开发,您可能已经使用Vue CLI来设置您的项目。

Vue CLI 是用于 Vue 开发的命令行界面,作为 Vue 生态系统的基线。对于我们的案例,它允许我们创建一个 Vue 应用程序。

首先,我们必须确保我们拥有最新版本的 Vue CLI,我们可以通过在终端中运行来做到这一点。

接下来,要创建我们的项目,我们要运行vue create <PROJECT-NAME>

如果我们成功更新了 CLI,我们应该可以选择 Vue3。

创建你的第一个 Vue3 项目——Vue 教程 一旦我们选择了%20Vue3%20选项,我们的应用程序就应该构建了。完成后,我们只需要进入我们的项目,然后运行我们的%20Vue%20应用程序!其命令是:
cd%20<PROJECT-NAME>%20
npm%20run%20serve

现在,如果我们在浏览器中导航到我们的应用程序http://localhost:8080/,我们应该会看到我们的应用程序!

可以了!

下面——让我们看一下创建%20Vue3%20项目的另一种选择。

Vite

Vite(发音类似“veet”)是一种新的%20Vue3%20构建工具,它在开发过程中使用%20ES%20模块导入服务代码,而不是使用%20Webpack%20等工具进行打包。

由%20Vue%20的创建者构建,它大大加快了开发速度,允许更快的热更新和更高效的冷服务启动。

Vite%20消除了捆绑过程,只按需编译代码——这意味着只编译当前影响当前屏幕的代码。这意味着您不必等待整个项目被捆绑后即可开始开发。

由于捆绑大型项目可能需要很长时间,因此%20Vite%20具有加快开发过程的巨大潜力。

为什么要使用%20Vue%20Vite?

现在您可能会问自己,%20“那么%20Vite%20与现有的%20vue-cli%20究竟有何不同?”

由于@vue-cli/service构建在%20webpack%20之上,它是一个模块打包器,将在启动、热重载和编译时打包你的整个%20Vue%20项目。

取而代之的是,Vue%20Vite%20将在您的代码中采用%20ES%20Import%20语法,让浏览器解析导入并为每个导入发出%20HTTP%20请求。

Vue%20Vite%20在开发过程中提供比基于捆绑器的解决方案更快的启动、热重载和编译速度。

假设地,通过%20HTTP%20请求处理导入可能会产生网络瀑布并且速度会变慢。但由于此方法仅适用于本地开发,因此这些差异应该可以忽略不计。

此外,正如我们稍后将讨论的那样,将您的%20Vite%20项目打包用于生产并完全避免此问题非常简单。

创建你的第一个%20Vite%20项目

要开始使用%20Vite,我们所要做的就是运行

npm%20init%20vite-app%20<项目名称>

然后,我们只需要进入我们的项目文件夹,安装我们的依赖项,然后使用以下命令运行我们的应用程序

cd%20<项目名称>%20
npm%20install%20
npm%20run%20dev

现在,如果我们导航到http://localhost:3000-%20我们应该会看到下面这个应用程序。

你应该知道的一些%20Vue%20Vite%20特性

1%20—%20捆绑您的项目以进行生产

Vite%20的一个目标是让%20Vue%20的开发和生产尽可能简单。虽然在开发期间没有捆绑,但捆绑您的项目以进行生产非常容易。

您所要做的就是运行npm%20run%20build

如果我们查看package.json,我们会看到这是调用vite%20build-%20与其他构建过程一样,它将捆绑您的%20Vue%20项目并准备要提供的%20dist%20文件夹。

2%20—%20管理%20URLS

与其他%20Vue%20项目设置一样,Vite%20提供了两种引用资产的方式

  1. 绝对%20-%20使用公用文件夹。这些资产使用%20/file.extension%20引用%20%20并会在构建项目时复制到%20dist%20文件夹的根目录。
  2. 相对——例如,src/assets%20文件夹中的文件是根据文件夹的文件结构进行相对访问的。_assets构建项目时,整个文件夹将放置在%20dist%20文件夹中

3%20—%20内置%20Typescript%20支持

Vue3%20中最大的变化之一是使用%20Typescript%20重写了核心库——允许类型检查和更好的错误消息,具体取决于您的%20IDE。

再一次,Vue%20Vite%20通过为%20.ts%20文件和%20SFC%20中的文件提供内置的%20Typescript%20支持,与%20Vue3%20顺利集成<script%20lang="ts">

了解%20Vue3%20组件

现在我们已经设置了%20Vue3%20应用程序并且了解了%20Vue3%20Vite%20工具,让我们来看看组件是如何工作的。

Vue3%20最大的变化是引入了%20Composition%20API。在这个新结构中,我们能够按功能组织我们的代码,而不是只能按数据、计算等来分离代码。

这使我们能够创建更加模块化、可读性和可扩展性更高的代码,因为单个功能的代码都可以写在我们代码的一个区域中。

如果我们打开src/components/HelloWorld.vue文件,我们可以看到看起来与我们在%20Vue2%20中编写的代码相同的代码——这称为%20Options%20API。

<script>%20
export%20default%20{%20
%20%20name:%20'HelloWorld',%20
%20%20props:%20{%20
%20%20%20%20msg:%20String%20
%20%20},%20
%20%20data()%20{%20
%20%20%20%20return%20{%20
%20%20%20%20%20%20count:%200%20
%20%20%20%20}%20
%20%20}%20}%20
<%20/script>

这很棒,因为它展示了我们如何仍然可以在%20Vue3%20中使用“旧”语法(如果您更习惯的话)。

在本教程中,我们将介绍如何在新的%20Composition%20API%20中实现这一点,并确定%20Options%20API%20中的更改。

Composition%20API%20中的反应式数据

在我们的%20SFC%20的脚本部分,让我们首先从%20vue%20核心库中导入一些东西,以允许我们创建反应变量。

%20%20%20%20import%20{%20ref%20}%20from%20'vue'

然后,让我们用看起来像这样的设置函数替换我们的数据选项。

import%20{%20ref%20}%20from%20'vue'%20
%20%20export%20default%20{%20
%20%20%20%20setup%20()%20{%20
%20%20%20%20%20%20
%20%20%20%20%20%20return%20{%20
%20%20%20%20%20%20%20
%20%20%20%20%20%20}%20
%20%20%20%20}%20
%20%20}

此设置方法在我们的组件创建时运行,我们可以在其中定义我们希望组件使用的所有反应数据、计算属性、方法等。

然后,此设置方法返回的任何内容都可以在我们的模板中访问!

使用%20ref%20创建响应式数据

为了展示这一点,让我们使用v-model我们的模板内部创建一个文本输入。

<template>%20
%20%20%20<div>%20
%20%20%20%20%20<h2>%20过滤%20LearnVue%20文章%20</h2>%20
%20%20%20%20%20<input%20
%20%20%20%20%20%20type='text'%20
%20%20%20%20%20%20placeholder='Filter%20Search'%20
%20%20%20%20%20%20v-model='query'%20
%20%20%20%20/>%20
%20%20%20%20{{%20query%20}}%20
%20%20%20</div>%20
</template%20>

添加个query使用%20ref%20创建我们的反应变量,然后从我们的设置方法中返回它。

setup%20()%20{%20
%20%20%20%20%20%20const%20query%20=%20ref('')%20

%20%20%20%20%20%20return%20{%20
%20%20%20%20%20%20%20%20query%20
%20%20%20%20%20%20}%20
}

然后,如果我们回到我们的应用程序,您会看到我们有使用%20Composition%20API%20的反应数据。

为简单起见,我没有包括本文中的所有样式,但如果您想查看我使用的样式,可以查看教程Github%20。

牛X!

接下来,让我们在输入中添加一个清除按钮,看看如何在 Composition API 中创建一个方法。

Composition API 中的方法

在 Options API 中,我们的 Vue 对象中有一个完整的属性专门用于方法。

对于较大的文件,这意味着可以在距离使用它的方法数百行之外声明数据——使组件更难阅读和维护。

在 Composition API 中,一切都在设置方法中,这意味着我们可以根据特性组织代码,甚至可以将公共特性提取到自己的代码模块中。

让我们创建一个重置方法,它接受我们的 ref 并将其设置为一个空字符串

setup () { 
      const query = ref('') 

      const reset = (evt) => { 
        query.value = '' // 清除查询
      } 
      
      return { 
        reset, 
        query 
      } 
}

需要注意的一件事是我们需要调用query.value才能访问数据的值。

为什么?

如果我们console.log(query),我们会看到它不仅仅是一个 String 值,而是一个Proxy。代理中的陷阱使我们能够轻松获取数据,但这就是为什么我们需要在我们的 refs 上调用 .value 的原因。

然后,就像在 Options API 中一样,我们可以在模板中添加一个按钮,以便reset在单击时调用此方法。

<button @click='reset'>reset</button>

现在,当我们使用新的清晰输入代码检查我们的应用程序时,它应该看起来有点像这样。

创建你的第一个 Vue3 项目——Vue 教程

向我们的 Vue3 项目添加第二个组件

现在我们有了输入和查询数据,让我们实际创建一个结果组件并开始显示我们的结果。

我们称它为SearchResults.vue

要将其添加到我们的HelloWorld.vue代码中,我们首先必须导入它并在我们的导出默认值中声明它。

<script>
    import { ref } from 'vue'  
    import SearchResults from './SearchResults.vue'  
    export default {  
        components: {  
            SearchResults  
        },  
        // ...  
    }
<script>

然后,我们可以像这样将它添加到我们的模板中.

<template>  
    <div>  
        <h2> Filter LearnVue Articles </h2>  
        <input  
        type='text'  
        placeholder='Filter Search'  
        v-model='query'  
        />  
        <br>  
        <button @click='reset'>reset </button>  
        <search-results/>  
    </div>  
</template>

可以,接下来让我们找到一种方法来使用 HelloWorld 组件中的查询字符串。

props

Vue props 允许父组件将数据传递给它的子组件。对于我们的案例,我们希望将我们的查询字符串从 HelloWorld.vue 传递到 SearchResults.vue

我们可以通过在 HelloWorld.vue 的标签内添加一个属性来做到这一点<search-result>

<search-results :query='query'/>  <!--是吧?easy-->

使用props

在 SearchResults.vue 中,让我们创建脚本的框架并从 JSON 文件导入所有文章信息。

import titles from '../post-data.json' 
export default { 
  setup (props, context) { 
 
  } 
}

然后,我们需要几个步骤来访问道具。

首先,我们必须在道具选项中声明它们。这告诉我们的组件期望什么 props 以及执行我们指定的任何 prop 验证。

export default { 
  props: { 
    query: String 
  }, 
  setup (props, context) { 
  // ...

如果仔细查看设置方法,您会发现它接受两个参数。

  1. props- 包含传递给我们组件的所有道具
  2. context- 包含属性、插槽和发射

我们将使用 props 来访问 setup 方法中 props 的值。

我们需要做的就是使用计算属性来使用我们的查询属性来过滤文章列表。

计算属性

与使用 ref 类似,我们需要将 computed 导入到我们的项目中。

import { computed } from 'vue'

然后,我们像这样设置它,我们的计算属性接受一个 getter 方法。只要其中一个依赖项发生变化,此方法就会更新我们的计算属性。

import { computed } from 'vue' 
import titles from '../post-data.json' 
export default { 
  props: { 
    query: String 
  }, 
  setup (props, context) { 
    
    const filteredTitles = computed(() => { 
     
    } )

    return { 
      filteredTitles 
    } 
  } 
}

对于此方法,我们要使用 query 属性过滤所有标题。一切都被转换为小写,所以我们不必担心大小写。

const filteredTitles = computed(() => { 
      return titles.filter(s => s.Name.toLowerCase().includes(props.query.toLowerCase())) } 
)

OK!

剩下要做的就是实际使用我们的模板来显示数据!这是使用v-for循环完成的。

<template> 
  <div class='root'> 
    <p> {{ query }}- {{ filteredTitles.length }} </p> 
    <ul> 
      <li v-for='title in filteredTitles' : key='title.Page'> 
        {{ title.Name }} 
      </li> 
    </ul> 
  </div> 
</template>

OK。最后让我们看看我们现在做了什么,再次单击此处以获取我用于此组件的确切 CSS 样式。

创建你的第一个 Vue3 项目——Vue 教程

Vue3 项目中的生命周期挂钩

在开始使用 Vue3 之前您应该了解的另一件事是如何使用[Vue 生命周期钩子]。

创建你的第一个 Vue3 项目——Vue 教程

与 Composition API 的其他部分一样,我们必须导入要使用的生命周期挂钩,并在设置方法中声明它们。

下面是一个如何使用生命周期挂钩的简单示例。

import { computed, onMounted } from 'vue' 
export default { 
  setup () { 
    
    onMounted(() => { 
      console.log('mounted') 
    }) } 
  }

总结

Vue3 中有很多很酷的特性,它们应该对创建可扩展的 Vue 应用程序非常有用。

希望本教程能让您在新环境中进行设置,并为您提供开始创建自己的 Vue3 项目的基础知识

和往常一样,如果您有任何意见或问题,请留下回复。

祝你编码愉快!每天一个小知识