1 | useState:用于在函数组件中添加状态管理能力。 |
vue2和vue3的区别
性能优化:
Vue 3引入了更好的虚拟DOM算法(Fragment:碎片化节点 Patching减少不必要的开销,提升性能),使得更新速度更快。 Vue 3使用了Proxy代替Object.defineProperty来实现响应式数据,提高了性能。 Tree-shaking支持有助于减小打包体积(将没有使用的模块代码移除掉,这样来达到删除无用代码的目的。)。Composition API:
Vue 3引入了Composition API,使得代码组织更加灵活和可复用,尤其适用于大型项目。 Composition API可以更好地组织逻辑和状态,避免了Vue 2中逻辑难以维护的问题。Typescript支持:
Vue 3对Typescript的支持更加友好,提供了更好的类型推断和类型检查。响应式系统:
Vue 3 引入了 Proxy 来替代 Object.defineProperty 实现响应式,提供了 Composition API、setup 函数等新特性,优化了响应式数据缓存机制,使得开发体验更好,性能更高效。编译优化:
Vue 3 在编译优化方面引入了静态树提升、事件侦听器缓存等新特性,生成的代码更精简、包体积更小、性能更高,相比 Vue 2 有明显提升。get函数
一、react 实现 get() 函数的示例 👇🏻👇🏻👇🏻👇🏻👇🏻👇🏻
1 | import React from 'react'; |
二、vue2 实现 get() 函数的示例 👇🏻👇🏻👇🏻👇🏻👇🏻👇🏻
1 | javascript |
三、vue3 实现 get() 函数的示例 👇🏻👇🏻👇🏻👇🏻👇🏻👇🏻
1 | <template> |
解决循环输出问题
案例:
1 | for(var i = 1; i <= 5; i ++){ |
如何实现打印结果为 1,2,3,4,5 呢?
1、setTimeout 为宏任务,由于 JS 中单线程 eventLoop 机制,在主线程同步任务执行完后才去执行宏任务,因此循环结束后 setTimeout 中的回调才依次执行
2、因为 setTimeout 函数也是一种闭包,往上找它的父级作用域链就是 window,变量 i 为 window 上的全局变量,开始执行 setTimeout 之前变量 i 已经就是 6 了,因此最后输出的连续就都是 6。
解决方法一:IIFE 立即执行函数
利用 IIFE(立即执行函数),当每次 for 循环时,把此时的变量 i 传递到定时器中,然后执行。
1 | for(var i = 1;i <= 5;i++){ |
解决方法二:使用 ES6 中的 let
ES6 中新增的 let 定义变量的方式,使得 ES6 之后 JS 发生革命性的变化,让 JS 有了块级作用域,代码的作用域以块级为单位进行执行。
1 | for(let i = 1; i <= 5; i++){ |
解决方法三:定时器传入第三个参数
setTimeout 作为经常使用的定时器,它是存在第三个参数的,日常工作中我们经常使用的一般是前两个,一个是回调函数,另外一个是时间,而第三个参数用得比较少。而第三个参数的传递,可以改变 setTimeout 的执行逻辑,从而实现我们想要的结果
1 | for(var i=1;i<=5;i++){ |
promise
Promise 是 ES6 新增的语法,解决了回调地狱的问题。
一般 Promise 在执行过程中,必然会处于以下几种状态之一。
· 待定(pending):初始状态,既没有被完成,也没有被拒绝。
· 已完成(fulfilled):操作成功完成。
· 已拒绝(rejected):操作失败。
实例:then catch finally
静态:all race resolve reject
· resolve:将其他数据类型转为 Promise 并将状态改为成功态
· reject:将其他数据类型转为 Promise 并将状态改为失败态
· all:参数所有返回结果为成功才返回
· allSettled: 参数不论返回结果是否成功,都返回每个参数执行状态
· any: 参数中只要有一个成功,就返回该成功的执行结果
· race:参数数组中所有 Promise 实例中最快的那个成功即为成功态,失败即为失败态
案例:
1 | const PENDING = 'pending' // 声明一个常量PENDING,表示Promise的初始状态 |