【Vue】Vue基础

系列文章目录

第二章 Vue基础(1)



第一节:Vue介绍

一、Vue介绍

Vue(读音/vjuː/,类似于view) 是一套用于构建前后端分离的框架。刚开始是由国内优秀选手尤雨溪开发出来的,目前是全球“最”流行的前端框架。使用vue开发网页很简单,并且技术生态环境完善,社区活跃,是前后端找工作必备技能!Vue目前是3版本了。
Vue官网:https://cn.vuejs.org/
Vue Github:https://github.com/vuejs

二、Vue项目创建

创建Vue项目目前有两种方式,一种是使用VueCli,另一种是使用Vite,其中VueCli已经处于维护模式了,过不了多久便不再支持,因此我们学习Vite的方式创建。
使用Vite 创建项目有以下优点:
采用热重载功能,能快速的启动服务。
对TypeScript、JSX等支持开箱即用。
按需编译,不用等待整个应用编译完成。
使用Vite 创建项目过程如下:

$ npm create vue@latest
或
$ npm create vue@3.10.3

接着会出现一些配置的提示:

# 输入项目名称
? 请输入项目名称: startvue

# 是否添加TypeScript支持
? 是否使用 TypeScript 语法?  否

# 是否添加JSX支持
? 是否启用 JSX 支持? 否

# 是否添加VueRouter
? 是否引入 Vue Router 进行单页面应用开发?  否

# 是否添加pinia
? 是否引入 Pinia 用于状态管理?  否

# 是否添加单元测试
? 是否引入 Vitest 用于单元测试?  否

# 是否添加端到端测试方案
? 是否要引入一款端到端(End to End)测试工具?  不需要

# 是否添加ESLint语法检查
? 是否引入 ESLint 用于代码质量检测?  是

# 是否添加Prettiert代码格式化
? 是否引入 Prettier 用于代码格式化? 否

# 是否引入Vue DevTools7调试
? 是否引入 Vue DevTools 7 扩展用于调试? (试验阶段) 是

创建完项目后,在项目根路径下输入命令:

$ cd startvue
$ npm install
$ npm run dev

即可启动项目运行。

三、项目结构介绍

node_modules:存放项目依赖的第三方包
public:一些公共的文件
src:项目的源代码,图片资源等
–assets:图片、字体等静态资源
–components:自定义组件
App.vue:项目的主入口vue文件
main.js:项目的主入口ts文件
index.html:项目的html文件
package.json:项目依赖包文件
vite.config.js:vite项目配置文件


第二节:组合式API

一、基本介绍

在Vue2中,使用的是Options API (选项式API)。而Vue3中虽然也兼容Options API ,但是更推荐Composition API (组合)。那什么是Options API,什么是Composition API 呢?先来看以下例子:
以上便是Options API ,如果改成Composition API ,那么要借助setup 语法。

二、setup介绍

setup 是Vue3 的配置项,它是一个函数,之前使用Options API 方式定义的数据、方法、计算属性、监听等数据,都是配置在setup 中。以下示例:

<script>
  import { ref, onMounted } from 'vue'

  export default {
    name: 'App',
    setup() {
      // 响应式状态
      // 响应式状态
      const count = ref(0)

      // 用来修改状态、触发更新的函数
      function increment() {
        count.value++
      }

      // 生命周期钩子
      onMounted(() => {
        console.log(`The initial count is ${count.value}.`)
      })

      return {
        count,
        increment
      }
    }
  }
</script>

<template>
  <button @click="increment">Count is: {{ count }}</button>
</template>

在setup 中返回的对象,不管是数据还是方法,都可以直接在模板中使用。而为了实现方便,可以使用setup语法糖,即<script setup>,这样就无须显示写setup 函数,写在script 中的所有数据和方法都可以直接在模板中使用。

<script setup>
  import { ref, onMounted } from 'vue'

  // 响应式状态
  // 响应式状态
  const count = ref(0)

  // 用来修改状态、触发更新的函数
  function increment() {
    count.value++
  }

  // 生命周期钩子
  onMounted(() => {
    console.log(`The initial count is ${count.value}.`)
  })
</script>

<template>
  <button @click="increment">Count is: {{ count }}</button>
</template>

三、setup上指定组件名称

上述代码无法指定组件名称,如果想要指定组件名称,还需要额外添加一个script 标签:

<script>
  export default {
    name: 'App',
  }
</script>

为了解决这个问题,可以使用vite-plugin-vue-setup-extend 插件来简化。步骤如下:
安装:npm install vite-plugin-vue-setup-extend --save-dev
配置:在vite.config.js中配置如下

import VueSetupExtend from 'vite-plugin-vue-setup-extend'

// https://vitejs.dev/config/
export default defineConfig({
  plugins: [
    vue(),
    VueSetupExtend()
  ],
})

在script标签上指定name属性:<script setup name="App">
Composition API 中新增了许多新的语法,我们后面再慢慢介绍。
关于Options API 和Composition API 谁更好的问题,这个仁者见仁智者见智,但是有一点需要注意,这个市场(招聘市场和开发市场)都在往Composition API 上转(可见ElementPlus的文档),我们作为开发者,也必须要学会Composition API 的使用。


第三节:响应式变量

使用组合式API的方式定义响应式变量,必须通过ref 或reactive 函数来实现。

一、使用ref函数定义响应式变量

语法为:let xxx = ref(初始值) 。使用如下:
使用ref函数定义的响应式变量,有两点需要注意:
在模板中可直接使用变量。
在script标签中,若要操作变量,则需要通过username.value来实现。

二、使用reactive函数定义响应式变量

定义一些复合型响应式变量,则应该使用reactive 函数来实现。基本语法为:let xxx = reactive(源对象) 。使用如下:

<script setup name="App">
  import { reactive } from 'vue'

  let author = reactive({username: "张三", age: 18})

  let books = reactive([
    {name: '水浒传',author: '施耐庵'},
    {name: '三国演义',author: '罗贯中'}
  ])

  const onModifyBookName = () => {
    books[0].name = '红楼梦'
  }

  const onUpdateUsername = () => {
    author.username = "李四"
  }

</script>

<template>
  <h1>用户名为:{{author.username}}</h1>
  <button @click="onUpdateUsername">修改用户名</button>
  <table>
    <thead>
      <tr>
        <th>书名</th>
        <th>作者</th>
      </tr>
    </thead>
    <tbody>
      <tr v-for="book in books" :key="book.name">
        <td>{{ book.name }}</td>
        <td>{{ book.author }}</td>
      </tr>
    </tbody>
  </table>
  <button @click="onModifyBookName">修改书名</button>
</template>

reactive 函数适合使用那些深层次的响应式变量。如果需要重新给reactive 函数定义的响应式变量赋值,那么需要通过Object.assign 来实现,否则将会失去响应式的功能:

Object.assign(books, [{name: '红楼梦',author: '曹雪芹'}])

三、ref和reactive对比

如果要定义一个基本数据类型的响应式变量,则必须使用ref。
如果要定义一个层级不深的复合类型的响应式变量,则ref和reactive都可以。
如果要定义一个层级很深的复合类型的响应式变量,则推荐使用reactive。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值