Vue 3教程01 - 介绍及环境配置


介绍

Vue.js只负责UI的构建,而不会做其他事情,比如路由,发出HTTP请求等。这些额外的功能在Vue生态环境中由其他组件完成,比如:

  • Vuex:状态管理
  • Vue router: 路由
  • Vuetify:UI组件

Vue可以用来创建可以复用的组件(Widgets),也可以用来创建SPA,所有的路由在客户端完成,而不是在服务器端。

Vue 3的新特性:

  • 支持TypeScript。
  • 允许多个根组件:通过这种方式可以减少一些不必要的HTML代码。
  • Composition API: 提高了代码的可重用性,可读性,及代码组织。通过使用setup()函数来实现。
  • Suspense组件:通过这种方式,可以更好的使用异步组件,也可以提供一个fall-back组件,比如一个spinner。
  • Teleport组件:可以在DOM的不同位置来渲染一个组件。可以用于一些特殊场景,比如:模式对话框中。
  • 性能优化
  • 对reactivity的改进
  • 在自定义组件中的多个v-model

awesome-vue这个项目列举了很多和Vue相关的信息:https://github.com/vuejs/awesome-vue
推荐安装Chrome插件:Vue.js devtools

Vue的优势

Vue的学习/使用门槛较低

  • 只需要了解基本的HTML/CSS/JS
  • 在页面中可以添加一个script标签后就开始使用Vue.js
  • 好用的Vue Devtools和命令行工具
  • 基于组件的架构:可以使用Vue创建一个可复用的Widget,然后在页面中重复使用。
  • 声明式语法:开发者只需要声明想要做什么,Vue会负责维护复杂的UI

Vue的适用面非常广

  • 可以使用工具从开始创建一个应用
  • 也可以在现有项目中引入Vue,逐步引入Vue

Vue的超强性能

  • 在运行时,gzipped后的库只有20K左右大小。
  • 通过虚拟DOM大幅提升性能。

环境设置

VS Code插件

  • Live Server:实时更新浏览器中的页面
  • Vetur:协助Vue代码编写
  • Vue 3 Snippets: Vue代码片段

关于代码风格:在Vue中不使用分号,因此很多开发人员也选择和Vue保持一致,不使用分号。当然,这要看个人喜好。

在线环境

如果不想在本地安装/配置Vue,可以使用stackblitz:

https://stackblitz.com/edit/vitejs-vite-vydt79?file=index.html&terminal=dev

创建SPA

通过这种方式开发SPA的优势:

  • 使用更新的JS/TS语言特性
  • 有一个即时开发服务器
  • 针对生产环境优化代码

安装Vue CLI

bash
npm i -g @vue/cli
vue -V

生成项目:

bash
vue create vue-demo

可以看到任何一个Vue组件(.vue为扩展名的文件)都由三部分组成:

  • tempalte: 这部分是必须提供的。
  • script:JS代码,可选
  • style:CSS样式,可选

Vue组件叫做Single File Component (SFC)。

这样就可以在script中定义属性,方法,组件等等,然后在template中访问他们。

markup
<template>
  <h1>{{ title }}</h1>
</template>

<script>
export default {
  name: "App",
  data() {
    return {
      title: "Welcome to my site",
    };
  },
};
</script>

使用Vite

Vite是新一代的前端构建工具(相对于webpack),其优点包括:

  • 在开发模式下,无需打包操作,可快速冷启动
  • 超级快速的热加载
  • 按需编译

传统的构建过程(比如:webpack):先进行打包,再响应请求

image
image

Vite的工作模式:先响应请求,再按需加载:

image
image

bash
npm init vite-app <project-name>
cd <project-name>
npm install
npm run dev

通过script引入Vue并创建一个简单APP

这种方式适合在现有Web项目中的部分页面中使用Vue。

首先在HTML中引入CDN:

markup
<script src="https://unpkg.com/[email protected]"></script>

或者使用最新的vue版本:

markup
<script src="https://unpkg.com/vue@next"></script>

然后在body中需要引入Vue代码,并同时定义Vue控制的一个根节点:

markup
<body>
  <div id="app">
    ID: {{ id }}<br/>
    Name: {{ name }}<br/>
    Score: {{ score }}
  </div>

  <script src="./main.js"></script>
</body>

对应的Vue代码在main.js中,在这里定义一个data函数,函数返回的JSON将能在HTML代码中通过变量方式访问,比如后面的, 等。

JavaScript
const app = Vue.createApp({
  data() {
    return {
      id: '9901',
      name: 'Lucas',
      score: '80'
    }
  }
})

app.mount('#app')

Vue中的目录组织

  • src/components
  • src/assets
  • public
  • node_modules

数据/属性绑定

由于任何放于href属性中的值都会被当作字符串处理,因此无法获取动态数据。如果想要解决这个问题,需要使用v-bind:属性名

比如:想要使用在data中定义的your_url属性:

JavaScript
data() {
  return {
    yourUrl: 'https://www.lcoding.club'
  }
},

那么在HTML中就可以这样:

markup
<a v-bind:href="yourUrl">go</a>

但一般情况下,我们会使用其简写形式:

markup
<a :href="yourUrl">go</a>

应用动态类

根据student.registered属性值来决定是否应用’tick-block’这个类:

markup
<li v-for="student in students" :class="{ tick-block: student.registered }">

template ref

在template中声明一个元素时,可以添加ref属性:

markup
<input type="text" ref="name">
<button @click="handleClick">Click me</button>

之后就可以通过this.$refs来访问这些元素:

JavaScript
export default {
  name: 'App',
  methods: {
    handleClick() {
      console.log(this.$refs.name);
      this.$refs.name.classList.add('your_css_class');
      this.$refs.name.focus();
    }
  }
}

文章作者: 逻思
版权声明: 本博客所有文章除特別声明外,均采用 CC BY-NC-ND 4.0 许可协议。转载请注明来源 逻思 !