vue3学习笔记(一)

vue3项目的创建

1、 使用 vue-cli 创建

## 查看@vue/cli版本,确保@vue/cli版本在4.5.0以上
vue --version
## 安装或者升级你的@vue/cli
npm install -g @vue/cli
## 创建
vue create vue_test
## 启动
cd vue_test
npm run serve

2、 使用 vite 创建

(1)什么是vite?—— 新一代前端构建工具。(和webpack一类)

(2)优势:

   - 开发环境中,无需打包操作,可快速的冷启动。
   - 轻量快速的热重载(HMR)。
   - 真正的按需编译,不再等待整个应用编译完成。

(3)传统构建 与 vite构建对比图
传统
vite
(4)创建步骤

## 创建工程
npm init vite-app <project-name>
## 进入工程目录
cd <project-name>
## 安装依赖
npm install
## 运行
npm run dev

vue3项目内容 与 vue2的差异

1、main.js

vue3引入的不再是Vue的构造函数了,引入的是一个名为createApp的工厂函数(无需通过new关键字调用)

vue3:

import {
    createApp } from 'vue'
import App from './App.vue'

createApp(App).mount('#app')
// 相当于:
// 创建应用实例对象--app(类似于vue2中的vm,但app比vm更轻,没有那么多的属性和方法)
// const app = createApp(App)
// 挂载
// app.mount('#app')

vue2:

 new Vue({
   
     render: h => h(App)
 }).$mount('#app')
//相当于:
 /*const vm = new Vue({
     render: h => h(App)    
 })
 vm.$mount('#app')*/

2、App.vue

组件中的模板结构可以没有根标签 :

<template>
  <img alt="Vue logo" src="./assets/logo.png">
  <HelloWorld msg="Welcome to Your Vue.js App"/>
</template>

常用 Composition API(组合式API)

官方文档

setup

Vue3.0中一个新的配置项,值为一个函数。

  1. setup是所有Composition API(组合API)“ 表演的舞台 ”
  2. 组件中所用到的:数据、方法等等,均要配置在setup中。
  3. setup函数的两种返回值:
    (1) 若返回一个对象,则对象中的属性、方法, 在模板中均可以直接使用。(重点关注!)
<template>
  <h1>app</h1>
  <h2>{
   {
   name}}</h2>
  <h2>{
   {
   age}}</h2>
  <button @click="sayHello">你好</button>
</template>

<script>

  export default {
   
    name: 'App',
    setup() {
   
      // 数据
      let name = '张三'
      let age = 18
      // 方法
      function sayHello() {
   
        alert(`我叫${
     name},我${
     age}岁了,你好啊`)
      }

      return {
   
        name,
        age,
        sayHello
      }
    }
  }
</script>

(2) 若返回一个渲染函数:则可以自定义渲染内容。(了解)

渲染函数是指vue2中使用的h:render: h => h(App)
在这里使用时,需要从vue中引入

<template>
  <h1>app</h1>
  <h2>{
   {
   name}}</h2>
  <h2>{
   {
   age}}</h2>
  <button @click="sayHello">你好</button>
</template>

<script>
  import {
   h} from 'vue'       //要从vue中引入h
  export default {
   
    name: 'App',
    setup() {
   
      // 数据
      let name = '张三'
      let age = 18
      // 方法
      function sayHello() {
   
        alert(`我叫${
     name},我${
     age}岁了,你好啊`)
      }
      
      return () => h('h1','尚硅谷')
    }
  }
</script>

此时,页面上只会显示尚硅谷

注意点:

(1)尽量不要与Vue2.x配置混用

  • Vue2.x配置(data、methos、computed…)中可以访问到setup中的属性、方法。
  • 但在setup中不能访问到Vue2.x配置(data、methos、computed…)。
  • 如果有重名, setup优先。

(2)setup不能是一个async函数,因为返回值不再是return的对象, 而是promise, 模板看不到return对象中的属性。(后期也可以返回一个Promise实例,但需要Suspense和异步组件的配合)

ref函数

  • 作用: 定义一个响应式的数据
  • 使用前先引入 import { ref } from 'vue'
  • 语法: const xxx = ref(initValue)
    • 创建一个包含响应式数据的引用对象(reference对象,简称ref对象)
    • JS中操作数据: xxx.value
    • 模板中读取数据: 不需要.value,直接:<div>{ {xxx}}</div>
  • 备注:
    • 接收的数据可以是:基本类型、也可以是对象类型。
    • 基本类型的数据:响应式依然是靠Object.defineProperty()getset完成的。
    • 对象类型的数据:内部 “ 求助 ” 了Vue3.0中的一个新函数—— reactive函数(将Proxy操作封装在了reactive函数中)。

解释:

1、上节中直接在setup()中直接写 let name = ‘张三’,并不是响应式的。直接修改name值页面上的值并不会变化

ref 函数可以定义一个响应式的数据,数据的格式为:

setup() {
   
      // 数据
      let name = ref('张三')
      let age = ref(18)
      function changeInfo() {
   
        console.log(name)
        console.log(age)
        //name = '李四'  //更新不起作用
        //age = 48
      }
      return {
   
        name,
        age,
        changeInfo
      }
    }

在这里插入图片描述
在这里插入图片描述
更新数据的正确方式:

<template>
  <h2>{
   {
   name}}</h2>
  <h2>{
   {
   age}}</h2>
  <button @click="changeInfo">change</button>
</template>

<script>
  import {
    ref } from "vue";
  export default {
   
    name: 'App',
    setup() {
   
      // 数据
      let name = ref('张三')
      let age = ref(18)

      function changeInfo() {
   
        name.value = '李四'
        age.value = 48
      }
      return {
   
        name,
        age,
        changeInfo
      }
    }
  }
</script>

2、对于对象类型的数据,应该如何修改呢

<template>
  <h2>{
   {
   job.type}}</h2>
  <h2>{
   {
   job.salary}}</h2>
  <button @click="changeInfo">change</button>
</template>

<script>
  import {
    ref } from "vue";
  export default {
   
    name: 'App',
    setup() {
   
      // 数据
      let name = ref('张三')
      let age = ref(
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值