草庐IT

十分钟 Vite + Vue 3 项目实战教程

前端新世界 2023-03-28 原文
本Vue 3教程将介绍如何构建一个简单的搜索模块,该模块使用文本输入过滤数组中的文章。

也就是说,在创建这个Vue 3项目的过程中,我们需要使用Composition API构建两个组件。

我们的目标是这样的:

是不是很有意思呢?事不宜迟,让我们开始编码吧。

开始

我们可以有很多种方法将Vue 3添加到现有项目中,甚至可以自己创建一个Vue 3项目。

本教程将介绍我个人最喜欢的两个途径:

  • Vue CLI
  • Vite

Vue CLI

如果你以前做过Vue开发,那么一定知道如何使用Vue CLI来设置项目。

Vue CLI是Vue开发的命令行界面,是Vue生态系统的基准。在本教程的示例中,我们将通过Vue CLI来创建一个Vue app。

首先,确保拥有最新版本的Vue CLI。我们可以通过运行npm update -g @vue/cli终端来做到这一点。

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

如果成功更新了CLI,那就可以选择Vue3。

一旦我们选择了Vue 3选项,就会构建app了。完成构建后,我们只需要进入项目,然后运行Vue app!其命令是:

cd <PROJECT-NAME>
npm run serve

现在,如果我们在浏览器中导航到http://localhost:8080/,就能看到app了!

完美!

那么另一个创建Vue 3项目的途径是怎么做呢?

Vite

Vite是一个新的Vue 3构建工具,它在开发过程中使用ES Module导入来提供代码,而不是使用webpack等工具捆绑。

Vite由Vue的创建者构建,它大大加快了开发速度,而且允许更快的热重载和更高效的冷服务器启动。

Vite消除了仅按需编译代码(仅编译现在影响当前屏幕的代码)的捆绑过程。这意味着你不必等待整个项目捆绑在一起即可开始开发。

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

为什么要使用Vue Vite?

现在你可能会问,“那么Vite与现有的vue-cli究竟有什么不同?

由于@vue-cli/service是建立在webpack之上的,因此它是一个模块捆绑器,将在启动、热重载和编译时捆绑整个Vue项目。

而Vue Vite将在代码中采用ES Import语法,让浏览器解析导入并为每次导入发出HTTP请求。

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

当然,通过HTTP请求处理导入可能会创建网络瀑布并减慢速度。但由于这种方法仅适用于本地开发,因此这些差异一般可忽略不计。

此外,正如我们稍后将讨论的那样,Vite项目捆绑用于生产从而完全避免这方面问题,真的是轻而易举。

创建第一个Vite项目

为了使用Vite,我们需要运行

npm create vite@latest

然后,只需进入项目文件夹,安装依赖项,然后使用以下命令运行app。

cd <project-name>
npm install
npm run dev
现在,我们用浏览器打开http://localhost:3000,那么就可以看到以下app。

你应该知道的一些Vue Vite功能

1. 捆绑项目进行生产

Vite的目标是使Vue的开发和生产尽可能简单。尽管在开发过程中没有捆绑,但是要捆绑项目以进行生产也非常容易。

你所要做的就是运行npm run build。

如果我们查看package.json,那么就会发现这是在调用vite build——它和其他构建过程一样,将捆绑Vue项目并准备dist文件夹来提供服务。

2. 管理网址

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

  • 绝对路径引用 – 使用公用文件夹。这些资源使用/_file.extension_引用,并将在构建项目时复制到dist文件夹的根目录。
  • 相对路径引用 – 例如,根据文件夹的文件结构相对访问src/assets文件夹中的文件。生成项目时,整个文件夹将作为_assets放置在dist文件夹中。

3. 内置TypeScript支持

Vue 3最大的变化之一是使用TypeScript重写了核心库——允许根据IDE进行类型检查和更好的错误消息。

Vue Vite也可以与Vue 3集成,为.ts文件和SFC中的TypeScript<script>提供内置的TypeScript支持。

了解 Vue 3 组件

在设置了Vue 3 app,了解了Vue 3 Vite工具之后,现在让我们来看看这些组件是如何工作的。

Vue 3最大的变化是引入了Composition API。在这个新结构中,我们能够按功能组织代码,而不仅仅是通过数据、计算等来分隔代码。

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

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

<script>
export default {
name: 'HelloWorld',
props: {
msg: String,
},
data() {
return {
count: 0,
}
},
}
</script>
上述代码展示了我们如何在Vue 3中使用“旧的”语法。

本教程接下来还将介绍如何在新的Composition API中执行此操作,并确定Option API的更改。

Composition API中的响应式数据

在SFC的脚本部分,我们首先从vue core库导入一些东西,以便创建响应式变量。

import { ref } from 'vue'
然后,用如下所示的setup函数替换原来的data选项。

import { ref } from 'vue'
export default {
setup() {
return {}
},
}
这个setup方法在创建组件时运行,我们可以在其中定义想要组件使用的所有响应式数据、计算属性、方法等。

然后,setup方法返回的任何内容都可以在模板中访问!

使用ref创建响应式数据

为了便于展示,我们先在模板中使用v-model创建一个文本输入框。

<template>
<div>
<h2>Filter LearnVue Articles</h2>
<input type="text" placeholder="Filter Search" v-model="query" />
{{ query }}
</div>
</template>
让我们使用ref创建响应式查询变量,然后从setup方法返回。

export default {
setup() {
const query = ref('')
return {
query,
}
},
}
好的,现在如果我们回到app,就可以看到使用Composition API的响应式数据。

是不是很赞?

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

Composition API中的方法

在Option API中,Vue对象有一个专用于方法的属性。

对于较大的文件,这意味着数据可能与使用它的方法相距数百行,从而使组件更难阅读和维护。

而Composition API,一切都放于setup方法中,这意味着我们可以根据功能组织代码,甚至可以将共同特征提取到它们自己的代码模块中。

让我们创建一个reset方法,该方法接受ref并将其设置为空字符串。

export default {
setup() {
const query = ref('')
const reset = (evt) => {
query.value = '' // clears the query
}
return {
reset,
query,
}
},
}
需要注意的一件事是,我们需要调用query.value才能访问数据的值。

为什么?

如果我们执行console.log(query),那么将看到它并不是一个字符串值,而是一个Proxy对象。Proxy中的陷阱使我们能够轻松获取数据,但这也恰恰就是为什么我们需要在ref调用.value的原因。

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

<button @click="reset">Reset</button>

现在,当我们使用新的输入框代码构建应用程序时,将如下所示。

为Vue 3项目添加第二个组件

有了输入和查询数据的组件,不妨实际创建一个results组件来显示结果。

我们将其命名为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" />
超级简单吧!

访问props

让我们在SearchResults.vue中创建组件的主结构代码,并从JSON文件中导入所有文章信息。

import titles from "../post-data.json";
export default {
setup(props, context) {},
};
然后,我们需要几个步骤来访问props。

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

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

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

  • props – 包含传递给组件的所有参数
  • context – 包含attrs、slots和emit。
我们将使用props在setup方法中访问props的值。

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

计算属性

与使用ref类似,也需要导入到项目中。

import { computed } from 'vue'
然后像这样设置它,其中的计算属性接受getter方法。只要有依赖项更改,这个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 prop过滤所有标题。

再将所有内容都转换为小写,那就不必担心大小写问题。

const filteredTitles = computed(() => {
return titles.filter((s) =>
s.Name.toLowerCase().includes(props.query.toLowerCase())
)
})
到现在就快差不多了!

剩下要做的就是实际使用模板来显示数据!下面的代码使用了v-for循环:

<template>
<div class="root">
<p>Showing {{ filteredTitles.length }} results for "{{ query }}"</p>
<ul>
<li v-for="title in filteredTitles" :key="title.Page">
{{ title.Name }}
</li>
</ul>
</div>
</template>
就是这样。

来看看最终的成果吧。

Vue 3项目中的生命周期钩子

在开始使用Vue 3之前,还有一件要知道的事是如何使用Vue生命周期钩子。

与Composition API的其他部分一样,我们必须导入生命周期钩子并在setup方法中进行声明,才能使用生命周期钩子。

下面是如何使用生命周期钩子的快速示例。

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

总结

Vue 3有很多很酷的功能,对于创建可扩展Vue app非常有用。看完本教程,有没有兴趣自己动手试试看呢?

有关十分钟 Vite + Vue 3 项目实战教程的更多相关文章

  1. ruby - 如何在 buildr 项目中使用 Ruby 代码? - 2

    如何在buildr项目中使用Ruby?我在很多不同的项目中使用过Ruby、JRuby、Java和Clojure。我目前正在使用我的标准Ruby开发一个模拟应用程序,我想尝试使用Clojure后端(我确实喜欢功能代码)以及JRubygui和测试套件。我还可以看到在未来的不同项目中使用Scala作为后端。我想我要为我的项目尝试一下buildr(http://buildr.apache.org/),但我注意到buildr似乎没有设置为在项目中使用JRuby代码本身!这看起来有点傻,因为该工具旨在统一通用的JVM语言并且是在ruby中构建的。除了将输出的jar包含在一个独特的、仅限ruby​​

  2. ruby-on-rails - 项目升级后 Pow 不会更改 ruby​​ 版本 - 2

    我在我的Rails项目中使用Pow和powifygem。现在我尝试升级我的ruby​​版本(从1.9.3到2.0.0,我使用RVM)当我切换ruby​​版本、安装所有gem依赖项时,我通过运行railss并访问localhost:3000确保该应用程序正常运行以前,我通过使用pow访问http://my_app.dev来浏览我的应用程序。升级后,由于错误Bundler::RubyVersionMismatch:YourRubyversionis1.9.3,butyourGemfilespecified2.0.0,此url不起作用我尝试过的:重新创建pow应用程序重启pow服务器更新战俘

  3. ruby-on-rails - 新 Rails 项目 : 'bundle install' can't install rails in gemfile - 2

    我已经像这样安装了一个新的Rails项目:$railsnewsite它执行并到达:bundleinstall但是当它似乎尝试安装依赖项时我得到了这个错误Gem::Ext::BuildError:ERROR:Failedtobuildgemnativeextension./System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/bin/rubyextconf.rbcheckingforlibkern/OSAtomic.h...yescreatingMakefilemake"DESTDIR="cleanmake"DESTDIR="

  4. Ruby 从大范围中获取第 n 个项目 - 2

    假设我有这个范围:("aaaaa".."zzzzz")如何在不事先/每次生成整个项目的情况下从范围中获取第N个项目? 最佳答案 一种快速简便的方法:("aaaaa".."zzzzz").first(42).last#==>"aaabp"如果出于某种原因你不得不一遍又一遍地这样做,或者如果你需要避免为前N个元素构建中间数组,你可以这样写:moduleEnumerabledefskip(n)returnto_enum:skip,nunlessblock_given?each_with_indexdo|item,index|yieldit

  5. postman接口测试工具-基础使用教程 - 2

    1.postman介绍Postman一款非常流行的API调试工具。其实,开发人员用的更多。因为测试人员做接口测试会有更多选择,例如Jmeter、soapUI等。不过,对于开发过程中去调试接口,Postman确实足够的简单方便,而且功能强大。2.下载安装官网地址:https://www.postman.com/下载完成后双击安装吧,安装过程极其简单,无需任何操作3.使用教程这里以百度为例,工具使用简单,填写URL地址即可发送请求,在下方查看响应结果和响应状态码常用方法都有支持请求方法:getpostputdeleteGet、Post、Put与Delete的作用get:请求方法一般是用于数据查询,

  6. 在VMware16虚拟机安装Ubuntu详细教程 - 2

    在VMware16.2.4安装Ubuntu一、安装VMware1.打开VMwareWorkstationPro官网,点击即可进入。2.进入后向下滑动找到Workstation16ProforWindows,点击立即下载。3.下载完成,文件大小615MB,如下图:4.鼠标右击,以管理员身份运行。5.点击下一步6.勾选条款,点击下一步7.先勾选,再点击下一步8.去掉勾选,点击下一步9.点击下一步10.点击安装11.点击许可证12.在百度上搜索VM16许可证,复制填入,然后点击输入即可,亲测有效。13.点击完成14.重启系统,点击是15.双击VMwareWorkstationPro图标,进入虚拟机主

  7. 计算机毕业设计ssm+vue基本微信小程序的小学生兴趣延时班预约小程序 - 2

    项目介绍随着我国经济迅速发展,人们对手机的需求越来越大,各种手机软件也都在被广泛应用,但是对于手机进行数据信息管理,对于手机的各种软件也是备受用户的喜爱小学生兴趣延时班预约小程序的设计与开发被用户普遍使用,为方便用户能够可以随时进行小学生兴趣延时班预约小程序的设计与开发的数据信息管理,特开发了小程序的设计与开发的管理系统。小学生兴趣延时班预约小程序的设计与开发的开发利用现有的成熟技术参考,以源代码为模板,分析功能调整与小学生兴趣延时班预约小程序的设计与开发的实际需求相结合,讨论了小学生兴趣延时班预约小程序的设计与开发的使用。开发环境开发说明:前端使用微信微信小程序开发工具:后端使用ssm:VU

  8. 微信小程序开发入门与实战(Behaviors使用) - 2

    @作者:SYFStrive @博客首页:HomePage📜:微信小程序📌:个人社区(欢迎大佬们加入)👉:社区链接🔗📌:觉得文章不错可以点点关注👉:专栏连接🔗💃:感谢支持,学累了可以先看小段由小胖给大家带来的街舞👉微信小程序(🔥)目录自定义组件-behaviors    1、什么是behaviors    2、behaviors的工作方式    3、创建behavior    4、导入并使用behavior    5、behavior中所有可用的节点    6、同名字段的覆盖和组合规则总结最后自定义组件-behaviors    1、什么是behaviorsbehaviors是小程序中,用于实现

  9. hadoop安装之保姆级教程(二)之YARN的配置 - 2

    1.1.1 YARN的介绍 为克服Hadoop1.0中HDFS和MapReduce存在的各种问题⽽提出的,针对Hadoop1.0中的MapReduce在扩展性和多框架⽀持⽅⾯的不⾜,提出了全新的资源管理框架YARN. ApacheYARN(YetanotherResourceNegotiator的缩写)是Hadoop集群的资源管理系统,负责为计算程序提供服务器计算资源,相当于⼀个分布式的操作系统平台,⽽MapReduce等计算程序则相当于运⾏于操作系统之上的应⽤程序。 YARN被引⼊Hadoop2,最初是为了改善MapReduce的实现,但是因为具有⾜够的通⽤性,同样可以⽀持其他的分布式计算模

  10. ruby - 如何在 Ruby 字符串中插入项目符号字符? - 2

    我正在尝试创建一个带有项目符号字符的Ruby1.9.3字符串。str="•"+"helloworld"但是,当我输入它时,我收到有关非ASCII字符的语法错误。我该怎么做? 最佳答案 你可以把Unicode字符放在那里。str="\u2022"+"helloworld" 关于ruby-如何在Ruby字符串中插入项目符号字符?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/1195

随机推荐