Vue3学习日记(day1)

Vue 2 已于 2023 年 12 月 31 日停止维护。
(学习基础:对vue2有一定基础和理解)


选项式 API 和组合式 API:

选项式 API (Options API):

使用选项式 API,我们可以用包含多个选项的对象来描述组件的逻辑,例如 datamethods 和 mounted。选项所定义的属性都会暴露在函数内部的 this 上,它会指向当前的组件实例。

<script>
export default {
  // data() 返回的属性将会成为响应式的状态
  // 并且暴露在 `this` 上
  data() {
    return {
      count: 0
    }
  },

  // methods 是一些用来更改状态与触发更新的函数
  // 它们可以在模板中作为事件处理器绑定
  methods: {
    increment() {
      this.count++
    }
  },

  // 生命周期钩子会在组件生命周期的各个不同阶段被调用
  // 例如这个函数就会在组件挂载完成后被调用
  mounted() {
    console.log(`The initial count is ${this.count}.`)
  }
}
</script>

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

(笔记:这就是vue2所使用的组合式api,template类似与html中的body部分,负责dom主体,script负责事件,style负责样式支持)

组合式 API (Composition API):

通过组合式 API,我们可以使用导入的 API 函数来描述组件逻辑。在单文件组件中,组合式 API 通常会与 <script setup> 搭配使用。这个 setup attribute 是一个标识,告诉 Vue 需要在编译时进行一些处理,让我们可以更简洁地使用组合式 API。比如,<script setup> 中的导入和顶层变量/函数都能够在模板中直接使用。

下面是使用了组合式 API 与 <script setup> 改造后和上面的模板完全一样的组件:

<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>

(笔记:
1:setup:setup类似于一个规则,使下面的分层更加清楚,达到解耦的程度,并且设置初始状态 

2:为什么需要导入ref和onMounted :这叫做显式导入,是组合式 API的特点,选项式 API中生命周期钩子都是被定义好了的组件。优势:打包和运行时候只会加载导入的组件,优化代码包,移除未使用的代码,这一过程被称为“树摇”(Tree Shaking)。

3:箭头函数的使用:这是es6+中的新的语法:

作用1:更加简洁的代码表示

原函数:

function increment() {
  count.value++
}


去除function 换成const 并转箭头函数:

const increment = () => {
  count.value++
};


ps:只有一行喊上课时候可以去除花括号:

const increment = () => count.value++;

作用2:this绑定的固定:

在普通函数中,this 的值由调用上下文决定,但在箭头函数中,this 的值是在定义时就被绑定了,它会捕获定义时所在上下文的 this 值。这意味着箭头函数没有自己的 this,而是继承自外层的词法作用域。

例子(以及this的用法):

this关键字在JavaScript中确实是一个常见且重要的概念,但它并不总是指向上一个包含的对象,它的具体含义取决于使用this的上下文。下面是一些基本的情况来帮助你理解:

1. 在全局作用域中

在全局作用域中,this通常指向全局对象。在浏览器环境中,全局对象是window;在Node.js中,则是global

console.log(this === window); // true (在浏览器中)

2. 函数调用

当一个函数作为普通函数被调用时,this通常指向全局对象。

function sayHello() {
  console.log(this);
}

sayHello(); // 输出:Window {...} (在浏览器中)

3. 对象的方法

this在一个对象的方法中被调用时,this指向调用该方法的对象。

const obj = {
  name: 'Alice',
  sayName: function() {
    console.log(this.name);
  }
};

obj.sayName(); // 输出:"Alice"

4. 构造函数

当使用new关键字调用一个函数时,this指向新创建的对象实例。

function Person(name) {
  this.name = name;
}

const alice = new Person('Alice');
console.log(alice.name); // 输出:"Alice"

5. 事件处理程序

在事件处理程序中,this通常指向触发事件的DOM元素。

document.getElementById('myButton').addEventListener('click', function() {
  console.log(this.id); // 输出:"myButton"
});

6. 箭头函数

箭头函数没有自己的this值,它们会捕获外层函数的this值。

const obj = {
  name: 'Alice',
  sayName: () => {
    console.log(this.name); // 注意这里this可能不是obj
  }
};

obj.sayName(); // 可能会输出 `undefined` 或者全局对象的属性

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值