位置: IT常识 - 正文

web前端面试高频考点——Vue3.x新增API(生命周期,ref、toRef 和 toRefs 的理解和最佳使用方式)(web前端面试基础知识)

编辑:rootadmin
web前端面试高频考点——Vue3.x新增API(生命周期,ref、toRef 和 toRefs 的理解和最佳使用方式) 系列文章目录内容参考链接JavaScript 面试高频考点HTML、CSS、JavaScript、ES6、AJAX、HTTP 面试考点 Vue2.x 面试高频考点Vue2.x 面试高频考点Vue3.x新增API生命周期,ref、toRef 和 toRefs 的理解和最佳使用方式Vue3.x升级的重要功能emits属性、生命周期、多事件、Fragment、移出.async、异步组件写法、移出 filter、Teleport、Suspense…Vue3.x响应式Composition API的逻辑复用、Proxy实现响应式Vue3.x深入理解v-model参数用法、watch和watchEffect区别等文章目录系列文章目录一、Vue3 比 Vue2 有什么优势?二、Vue2 和 Vue3 生命周期区别1、Options API 生命周期2、Composition API 生命周期三、如何理解 Composition API 和 Options API1、Composition API 带来了什么2、Composition API 和 Options API 如何选择?3、如何选择4、别误解 Composition API四、如何理解 ref、toRef 和 toRefs1、ref2、ref 扩展(获取模板的dom元素)3、toRef4、toRefs五、ref、toRef 和 toRefs 的最佳使用方式一、Vue3 比 Vue2 有什么优势?性能更好体积更小更好的 ts 支持更好的代码组织更好的逻辑抽离更多新功能二、Vue2 和 Vue3 生命周期区别

推荐整理分享web前端面试高频考点——Vue3.x新增API(生命周期,ref、toRef 和 toRefs 的理解和最佳使用方式)(web前端面试基础知识),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:web前端面试题2021及答案,web前端面试题最新,web前端面试常问知识,web前端面试题最新,web前端面试常问知识,web前端高频面试题,web前端面试宝典,web前端面试宝典,内容如对您有帮助,希望把文章链接给更多的朋友!

App.vue 父组件:

<template> <div> <life-cycles :msg="msg" v-if="flag" /> <button @click="changeHandler">change msg</button> <button @click="changeFlagHandler">change flag</button> </div></template><script>import LifeCycles from "./components/LifeCycles.vue";export default { data() { return { msg: "hello vue3", flag: true, }; }, methods: { changeHandler() { this.msg = "hello vue3" + Date.now(); }, changeFlagHandler() { this.flag = !this.flag; }, }, components: { LifeCycles },};</script>1、Options API 生命周期

LiftCycles.vue 子组件:

Vue2.x 的形式点击按钮进行 组件更新 和 组件销毁(查看控制台输出内容)<template> <p>生命周期 {{ msg }}</p></template><script>export default { name: "LiftCycles", props: { msg: String, }, beforeCreate() { console.log("beforeCreate"); }, created() { console.log("created"); }, beforeMount() { console.log("beforeMount"); }, mounted() { console.log("mounted"); }, beforeUpdate() { console.log("beforeUpdate"); }, updated() { console.log("updated"); }, beforeUnmount() { console.log("beforeUnmount"); }, unmounted() { console.log("unmounted"); },};</script>

2、Composition API 生命周期beforeDestroy 改为 beforeUnmountdestroyed 改为 unmounted其他沿用 Vue2 的生命周期<template> <p>生命周期 {{ msg }}</p></template><script>import { onBeforeMount, onMounted, onBeforeUpdate, onUpdated, onBeforeUnmount, onUnmounted,} from "vue";export default { name: "LiftCycles", props: { msg: String, }, // 等于 beforeCreate 和 created setup() { console.log("setup"); onBeforeMount(() => { console.log("onBeforeMounted"); }); onMounted(() => { console.log("onMounted"); }); onBeforeUpdate(() => { console.log("onBeforeUpdate"); }); onUpdated(() => { console.log("onUpdated"); }); onBeforeUnmount(() => { console.log("onBeforeUnmount"); }); onUnmounted(() => { console.log("onUnmounted"); }); },};</script>

三、如何理解 Composition API 和 Options API

Options API 对比 Composition API:

1、Composition API 带来了什么更好的代码组织更好的逻辑复用更好的类型推导2、Composition API 和 Options API 如何选择?不建议共用,容易引起代码混乱Composition API 用于复杂的业务情况Options API 用于简单的业务情况3、如何选择不建议乱用,会引起混乱小型项目、业务逻辑简单,用 Options API中大型项目、逻辑复杂,用 Composition API4、别误解 Composition APIComposition API 属于高阶技巧,不是基础必会Composition API 是为解决复杂业务逻辑而设计Composition API 就像 Hooks 在 React 中的地位四、如何理解 ref、toRef 和 toRefs1、ref生成值类型的响应式数据可以用于 reactive,也可以用于模板(不需要 .value)用 .value 去修改值所有的 ref 变量,尽量使用 xxxRef 的格式命名,便于区分

Ref.vue 组件

ref 用来定义响应式的值类型reactive 用来定义响应式的引用类型ref 定义的值类型可在 reactive 和 模板中直接使用(不需要 .value)修改值的时候要使用 .value<template> <p>ref demo {{ ageRef }} {{ state.name }}</p></template><script>import { ref, reactive } from "vue";export default { name: "Ref", setup() { const ageRef = ref(21); // 值类型 响应式 const nameRef = ref("杂货铺"); const state = reactive({ name: nameRef, }); setTimeout(() => { console.log("ageRef", ageRef.value); ageRef.value = 18; // .value 修改值 nameRef.value = "前端杂货铺"; }, 1000); return { ageRef, state, }; },};</script>

web前端面试高频考点——Vue3.x新增API(生命周期,ref、toRef 和 toRefs 的理解和最佳使用方式)(web前端面试基础知识)

2、ref 扩展(获取模板的dom元素)

RefTemplate.vue 组件

ref 本身的意思就是一个引用,给它传什么,它就是指向什么传一个 DOM 当然就指向 DOM 了<template> <p ref="elemRef">我是一行文字</p></template><script>import { ref, onMounted } from "vue";export default { name: "RefTemplate", setup() { const elemRef = ref(null); onMounted(() => { console.log('ref template', elemRef.value.innerHTML, elemRef.value); }) return { elemRef, }; },};</script>

3、toRef针对一个响应式对象(reactive)的 prop(属性)创建一个 ref,具有响应式两者保持引用关系

toRef.vue 组件

toRef(对象, "属性") 修改响应式对象的属性改变 ageRef 时, state.age 也会改变改变 state.age 时,ageRef 也会改变<template> <p>toRef demo - {{ ageRef }} - {{ state.name }} - {{ state.age }}</p></template><script>import { reactive, toRef } from "@vue/reactivity";export default { name: "ToRef", setup() { const state = reactive({ age: 20, name: "杂货铺", }); // toRef 如果用于普通对象(非响应式对象),产出的结果不具备响应式 // const state = { // age: 20, // name: '杂货铺' // }// 修改响应式对象(reactive)的一个属性(age) const ageRef = toRef(state, "age"); setTimeout(() => { state.age = 25; }, 1000); setTimeout(() => { ageRef.value = 30; // 用 .value 修改值 }, 2000); return { state, ageRef, }; },};</script>

4、toRefs将响应式对象(reactive 封装)转换为普通对象对象的每个 prop 都是对应的 ref两者保持引用关系

toRefs 组件

toRefs,将响应式对象变为普通对象(仍然具有响应式)对象的每个属性都是对应的 ref<template> <p>toRefs demo {{ ageRef }} {{ nameRef }}</p></template><script>import { toRefs, reactive } from "vue";export default { name: "ToRefs", setup() { const state = reactive({ age: 20, name: "杂货铺", }); // 将响应式对象,变为普通对象 const stateAsRefs = toRefs(state); // 每个属性,都是 ref 对象 const { age: ageRef, name: nameRef } = stateAsRefs; setTimeout(() => { state.age = 25 }, 1000) return { ageRef, nameRef, }; },};</script>

或者这么写(推荐):

直接返回这个普通对象注意此时模板内容也发生了变化,直接写对象里面的属性<template> <p>toRefs demo {{ name }} {{ age }}</p></template><script>import { toRefs, reactive } from "vue";export default { name: "ToRefs", setup() { const state = reactive({ age: 20, name: "杂货铺", }); // 将响应式对象,变为普通对象 const stateAsRefs = toRefs(state); setTimeout(() => { state.age = 25 }, 1000) return stateAsRefs },};</script>

五、ref、toRef 和 toRefs 的最佳使用方式用 reactive 做对象的响应式,用 ref 做值类型的响应式setup 中返回 toRefs(state),或者 toRefs(state, ‘xxx’)ref 的变量命名都用 xxxRef合成函数返回响应式对象时,使用 toRefs

xxx.js 文件

定义函数和响应式对象返回时转为 refimport { toRefs, reactive } from "vue"function useFeatureX() { const state = reactive({ x: 1, y: 2 }) // 逻辑运行状态,省略 N 行 // 返回时转换为 ref return toRefs(state)}export default useFeatureX

xxx.vue 组件

使用时直接写对象的属性就可以export default { setup() { // 可以在不是去响应式的情况下破坏结构 const { x, y } = useFeatureX() return { x, y } } }

不积跬步无以至千里 不积小流无以成江海

这篇文章如果对你有些许帮助,还请铁铁 三连 + 关注 支持一波,优质好文,正在产出…

本文链接地址:https://www.jiuchutong.com/zhishi/297874.html 转载请保留说明!

上一篇:移动端ui框架(好用的移动端ui框架)

下一篇:〖2023·新星计划·第四季〗开启,计算机视觉方向火爆预热中~(新星计划2021)

  • 有多少“不得已”,最后成了“大欢喜”(有多少不得已来不及还流浪在梦里)

    有多少“不得已”,最后成了“大欢喜”(有多少不得已来不及还流浪在梦里)

  • 网络cup是什么意思(cup是啥意思呀)

    网络cup是什么意思(cup是啥意思呀)

  • 淘宝发不了图片给卖家(淘宝发不了图片给卖家怎么设置)

    淘宝发不了图片给卖家(淘宝发不了图片给卖家怎么设置)

  • ios13信息感叹号怎么办(iphone13 信息感叹号)

    ios13信息感叹号怎么办(iphone13 信息感叹号)

  • 怎么关闭拼单返现(拼多多如何关闭拼单返现)

    怎么关闭拼单返现(拼多多如何关闭拼单返现)

  • 华为云电脑密码是什么(华为云电脑初始密码)

    华为云电脑密码是什么(华为云电脑初始密码)

  • 苹果铅笔怎么充电(苹果铅笔多久充满电)

    苹果铅笔怎么充电(苹果铅笔多久充满电)

  • 应用更新后是内存变大还是变小(应用更新后是内核吗)

    应用更新后是内存变大还是变小(应用更新后是内核吗)

  • iwatch功能介绍(applewatch功能详解)

    iwatch功能介绍(applewatch功能详解)

  • 苹果数据线更换条件(苹果数据线更换过吗)

    苹果数据线更换条件(苹果数据线更换过吗)

  • 电子版和扫描件一样吗(将纸质版扫描成电子版的软件)

    电子版和扫描件一样吗(将纸质版扫描成电子版的软件)

  • 抖音上@抖音小助手是什么意思(抖音上抖音小女孩练舞蹈)

    抖音上@抖音小助手是什么意思(抖音上抖音小女孩练舞蹈)

  • ps怎么把rgb改成cmyk(ps怎么把rgb改为cmyk)

    ps怎么把rgb改成cmyk(ps怎么把rgb改为cmyk)

  • 要看网址怎么打开(想看网址怎么办)

    要看网址怎么打开(想看网址怎么办)

  • qq群里的屏幕分享在哪里找(qq群分屏怎么弄出来)

    qq群里的屏幕分享在哪里找(qq群分屏怎么弄出来)

  • 荣耀20pro5gwifi频率多少(荣耀20prowifi参数)

    荣耀20pro5gwifi频率多少(荣耀20prowifi参数)

  • 笔记本电脑拔掉电源就关机怎么回事(笔记本电脑拔掉电池插着电源好吗)

    笔记本电脑拔掉电源就关机怎么回事(笔记本电脑拔掉电池插着电源好吗)

  • 流量信号上的hd是什么意思(手机流量后面的hd)

    流量信号上的hd是什么意思(手机流量后面的hd)

  • 吉祥科技的验证码是干嘛的(吉祥科技数码卖手机怎么样)

    吉祥科技的验证码是干嘛的(吉祥科技数码卖手机怎么样)

  • idc的含义(idc是指什么)

    idc的含义(idc是指什么)

  • 苹果11发短信怎么切换卡(苹果11发短信怎么显示已读)

    苹果11发短信怎么切换卡(苹果11发短信怎么显示已读)

  • 抖音里面怎么发表情包(录音抖音里面怎么发)

    抖音里面怎么发表情包(录音抖音里面怎么发)

  • 手机被限流了怎么办(手机被限流了怎么解除)

    手机被限流了怎么办(手机被限流了怎么解除)

  • 怎样找回交管12123密码(怎样找回交管12123的登录密码)

    怎样找回交管12123密码(怎样找回交管12123的登录密码)

  • 微信注销账号后手机能不能再注册(微信注销账号后多久可以再注册)

    微信注销账号后手机能不能再注册(微信注销账号后多久可以再注册)

  • 手机淘宝聊天记录如何恢复(手机淘宝聊天记录中的文件怎样下载保存)

    手机淘宝聊天记录如何恢复(手机淘宝聊天记录中的文件怎样下载保存)

  • redmi是小米还是红米(小米 redmi)

    redmi是小米还是红米(小米 redmi)

  • 华为手机开机出现新闻资讯怎么关闭(华为手机开机出现恢复系统怎么办)

    华为手机开机出现新闻资讯怎么关闭(华为手机开机出现恢复系统怎么办)

  • cad怎么画虚线快捷键(cad画虚线快捷指令)

    cad怎么画虚线快捷键(cad画虚线快捷指令)

  • 优酷会员有哪些特权(优酷会员电视剧有哪些)

    优酷会员有哪些特权(优酷会员电视剧有哪些)

  • 黑胶cd和普通cd区别(黑胶cd和普通cd哪个音质好)

    黑胶cd和普通cd区别(黑胶cd和普通cd哪个音质好)

  • mcu是什么意思的缩写(mcu是干什么的)

    mcu是什么意思的缩写(mcu是干什么的)

  • 苹果Mac隐藏壁纸在哪里?Mac隐藏壁纸查找教程(macbook隐藏)

    苹果Mac隐藏壁纸在哪里?Mac隐藏壁纸查找教程(macbook隐藏)

  • 圣诞节英文祝福/贺卡(圣诞节英文祝福语50字)

    圣诞节英文祝福/贺卡(圣诞节英文祝福语50字)

  • 车辆购置税会计科目怎么做账
  • 检查记账凭证的主要方法有哪些?
  • 隔月发票退回应该如何操作
  • 母公司合并子公司会计处理
  • 企业筹建期间契税账务处理
  • 费用计入管理费用与销售费用的区别
  • 工会筹备金需不需要计提
  • 减值准备为什么影响利润总额
  • 红字发票申请表盖什么章
  • 减免增值税申报表
  • 先结转损益还是先结转本年利润
  • 企业购买的雇主责任险
  • 足球俱乐部买卖球员的程序
  • 红字发票做进项转出还是红字负数
  • 文化传媒公司取名字不带文化
  • 调表不调账最后会有什么问题
  • 营业费用率说明什么
  • 招待费进项税额转出会计分录
  • 车辆商业险和交强险可以分开买吗
  • 新成立的分公司怎么样
  • 小规模纳税人网上申报流程视频
  • 特殊业务分录
  • 个人提前退休取得的一次性补贴收入免征
  • 餐饮装修费用计入什么科目
  • 发票密码区出格了怎么调整
  • 去银行打回单需要带身份证吗
  • 计提长期债券利息分录
  • 销售折让和折扣的风险点
  • 民间非盈利组织会计信息的使用者
  • 公司员工私车公用协议要签吗
  • 日志文件的名称和位置是什么
  • Element UI 及 Element Plus框架
  • Win11 Build 22000.282正式版推送: 附更新修复内容汇总
  • 外币债券汇兑损益怎么算
  • 2021发票勾选认证
  • laravel 5异常错误:FatalErrorException in Handler.php line 38的解决
  • php单例模式应用场景
  • 销项税和进项税抵扣的会计分录
  • 暂无支付能力的原因
  • 流动资产占总资产比重多少较为合适
  • php获取get
  • 城建税教育费附加什么时候交
  • 残疾人保障金工资总额包括年终奖吗
  • 毕业设计基于web难还是JAVA
  • 回顾2021年作文
  • 计提坏账准备会影响应收账款账面价值吗
  • 哪些研发费用可以资本化
  • 小规模纳税人附加税减免政策2023
  • js调用自己
  • 收益相关的政府补助账务处理
  • 公司借给股东的钱金额较大股东可以在年底现金归还吗
  • 可供出售金融资产名词解释
  • 企业所得税季初和季末怎么算
  • 增值税免税优惠梳理
  • 物流公司交的保证金可以退吗?
  • 电子发票和增值税发票有什么区别
  • 境内企业借外债,不还会怎么样
  • 参加新冠疫情防控工作感悟 医务人员
  • 微信验证收到的信息在哪
  • 企业的银行转账多久到账
  • 预付账款科目的余额如果在借方,则在资产负债表上
  • 税法上的营业收入怎么算
  • 汇算清缴主要检查什么
  • 结转成本的方法有几种
  • 盈余公积什么时候会出现在账面
  • mac怎么安装新系统
  • centos7配置ssh免密码登录
  • PHP time_nanosleep() 函数使用介绍
  • windows8.1开机
  • diskmakerx制作u盘需要多久
  • win8.1无线
  • win10系统经典桌面
  • 搜索超级模式
  • android:ViewPager与FragmentPagerAdapter
  • jquery输入框改变事件
  • lru缓存机制是什么
  • nodejs orm框架
  • 手把手教你把币从交易所提到钱包
  • jquery ajax局部加载方法详解(实现代码)
  • 小规模纳税人的增值税怎么计算
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设