关于vue3的一些前端面试题

1.ref()

  • 响应式对象
  • 顶级响应式对象,可以在模板中直接使用不用添加 .value,可以直接使用
  • ref() 对像更新,Vue会自动检测更新,然后更新Dom
  • 深层次的对象也可以是响应式,也会被追踪
  • shallowRef() 是ref的浅层次表现,深层次的浅套不起作用
  • triggerRef() 强制触发依赖于一个浅层 ref 的副作用,这通常在对浅引用的内部值进行深度变更后使用。
  • toRef() 复制reactive()内的对象变成 ref
  • toRefs() 复制reactive()内的对象变成 ref`
  const obj = reactive({
    name: 'wangxuan',
    age: 18
  })

  const rName = toRef(obj, 'name')
  // rName.value = 'wangxuan'

  const rObj = toRefs(obj)
  // rObj.name.value = 'wangxuan'
  // rObj.age.value = 18

2.reactive()

  • reactive()本身具有响应式,不用添加 .value
  • 深层次的对象也可以是响应式,也会被追踪
  • 深层次的对象,如果只修改了内部属性,不会触发更新,需要使用 shallowReactive(),推出深层次
  • reactive()有局限性,所以推荐使用 ref()

    • 只对对象、数组、Set、Map等具有深层次的响应,不能对 stringnumberboolean等基本类型进行响应式
    • 不能替换整个对象,整个替换会失去响应式
    • 对解构操作不友好。要想结构出到本地对象还是响应式,可以用ref() 对象包裹,例子:
    const state = reactive({
      count: 0
    })
    // 结构出来的count就失去了响应式
    const { count } = state
    
    // 需要这样
    const state = reactive({
      count: ref(0)
    })
    // 结构出来的count是响应式
    const { count } = state

3.computed

  • 计算属性的返回值也是一个ref()对象,具有响应式。
  • 计算属性会缓存,只有当依赖的响应式发生变化时才会重新计算。
  • 计算属里 不要改变其他状态、在 getter 中做异步请求或者更改 DOM,这些操作可以在watch()中完成
  • 计算属性最好只作为一个只读的属性,官方推荐。
  • 想要更改计算属性的返回值,需要重新写计算属性的getter()setter()方法,一下例子:
  const state = ref('已读')
  const state1 = ref('回复')
  // 更改计算属性的返回值
  const countRef = computed({
    get: () => {
      return state.value + ' ' + state1.value
    },
    set: (val) => {
      [state.value, state1.value] = val.split(' ')
    }
  })
  countRef.value = '已读 乱回'
  console.log(state.value) // 已读
  console.log(state1.value) // 乱回

4.watch

-浅层监听

  // 监听单个属性
  watch(state, (newVal, oldVal) => {
    console.log(newVal, oldVal)
  })
  // 监听多个属性,多个属性的监听,newValue是一个位置与监听源一致的数组
  watch([state, state1], (newVal, oldVal) => {
    console.log(newVal, oldVal)
  })
  // 监听reactive对象, satae对象的任意属性都会被监听
  // 监听响应式对象的单个属性值的时候需要用getter函数的形式监听
  watch(()=> state.value, (newVal, oldVal) => {
    console.log(newVal, oldVal)
  })
  // 监听整个响应式对象
  watch(state, (newVal, oldVal) => {
    console.log(newVal, oldVal)
  })
  // 监听getter函数,函数被调用就会执行
  watch(()=> sate.value + state1.value, (newVal, oldVal) => {
    console.log(newVal, oldVal)
  })

-深层监听添加{deep: true}属性,一般不使用渐层监听其实已经带了,添加{deep: true}会遍历整个监听对象,降低性能没有必要的时候避免使用
-{immediate:true}属性可以在创建监听起的时候就触发监听器
-{once:true}属性只监听一次
-{flush:'pre'}属性在DOM更新前执行监听器
-{flush:'post'}属性在DOM更新后执行监听器
-{flush:'sync'}属性在DOM更新前执行监听器

5.watchEffect

  • 不需要指定监听源,在回调里被用到的响应式属性都会被监听
  • 想要监听的对象,在回调中多个属性被用到都会触发监听
  • watch的区别就在于不需要指定监听源,watchEffect会更高效,写法也会更简洁
  • 在异步回调中使用监听器需要手动停止监听,返回一个停止函数,调用停止函数即可停止监听
const stop = watchEffect(() => {
  console.log(state.value)
})
stop() // 手动停止监听

6.组件传值

  • 模版引用可以 <ChildComponent ref="childRef" />childRef就是子组件的引用,可以访问自组件所有属性, 子组件要通过defineExpose先暴露属性值
  • 保持单项数据流
  • 双向绑定,子组件使用defineModel()声明,父组件使用v-model绑定,子组件发生改变,父组件也会变化
  • 父组件通过props属性传递数据给子组件
// 父组件 -> 子组件
<ChildComponent :name="name" :age="age" />
// 子组件接收
const props = defineProps({
  name: String,
  age: Number,
  text: String,
  // 参数校验,必填与默认值
  text1: {
    type: String,
    default: 'hello',
    required: true
  }
})

// 子组件 -> 父组件
const emit = defineEmits({
  'change': null,
  // 事件校验
  'click': ()=> {
    return true
  }
  })
emit('change', 'hello')

// 子组件 -> 父组件
const emit = defineEmits(['change'])
emit('change', {
  name: 'hello',
  age: 18
})

7.provide/inject

  • 父组件通过provide传递数据,子组件通过inject接收数据
  • 子组件可以接收父组件传递的数据,也可以接收祖先组件传递的数据
  • 保证数据流是单向的,也可以提供更改父组件数据的方法,在子组件中调用
// 父组件
const state = reactive({
  name: 'hello',
  age: 18
})
provide('state', state)

// 子组件
const state = inject('state')

8.v-if vs v-for

  • v-if 优先级更高,如果同时使用,v-if先执行
  • 不推荐同时使用

9.v-for 也可以使用 of替代in这样写更接近js的迭代器的语法

作为开发者,我们需要保持好奇心和学习热情,不断探索新的技术,只有这样,我们才能在这个快速发展的时代中立于不败之地。介绍一款程序员都应该知道的软件JNPF快速开发平台,很多人都尝试用过它,它是功能的集大成者,任何信息化系统都可以基于它开发出来。

JNPF可以实现应用从创建、配置、开发、测试到发布、运维、升级等完整生命周期的管理。减少了传统应用程序的代码编写量,通过图形化、可视化的界面,以拖放组件的方式,即可快速生成应用程序的产品,大幅降低了开发企业管理类软件的难度。

当然,我更建议大家成为一个全栈,不要把自己的定位局限于前端。

感谢阅读本文

如果有什么建议,请在评论中让我知道。我很乐意改进。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/770665.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

检测水管缺水的好帮手-管道光电液位传感器

管道光电液位传感器是现代清水管道管理中的重要技术创新&#xff0c;不仅提高了检测液位的精确度&#xff0c;还解决了传统机械式和电容式传感器存在的诸多问题&#xff0c;成为检测管道缺水的可靠利器。 该传感器采用先进的光学感应原理&#xff0c;利用红外光学组件通过精密…

2G 3G 4G常用知识点

名词解释 LTE网络、WCDMA网络、2G、3G 4G 区别及联系? 2G (第二代移动通信技术) 2G是最早的数字移动电话标准&#xff0c;主要支持语音通话和短信服务。代表性技术有GSM (Global System for Mobile Communications) 和CDMA (Code Division Multiple Access)。 3G (第三代移动…

相亲交友APP系统婚恋交友社交软件开发语音视频聊天平台定制开发-婚恋相亲交友软件平台介绍——app小程序开发定制

互联网飞速发展的时代&#xff0c;相亲交友软件成为了许多年轻人首选的相亲方式&#xff0c;越来越多的单身男女希望在婚恋交友软件平台上寻找灵魂伴侣&#xff0c;相亲交友软件因此具有很高的市场价值。 多客婚恋相亲交友系统是一款定位高端&#xff0c;到手就能运营的成熟婚恋…

Java入门编码10个注意点,大家注意“避坑”

插&#xff1a; AI时代&#xff0c;程序员或多或少要了解些人工智能&#xff0c;前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家(前言 – 人工智能教程 ) 坚持不懈&#xff0c;越努力越幸运&#xff0c;大家…

FileZilla的安装和使用(快速上手版)

下载 登陆官网下载下载 - FileZilla中文网 服务端 我们选择一个中文安装最新版本下载 客户端 我们选择绿色免安装版进行下载 安装 安装服务端 双击运行下载好的服务端安装包 点击 我接受 点击 下一步 设置好安装路径&#xff0c;点击 下一步 这里默认即可&#xff0c;点击…

智慧园区可视化:构建全方位智能管理体系

通过图扑的 2D、 3D 和 GIS 可视化技术结合倾斜摄影、数字孪生和视频融合等技术&#xff0c;将园区各类数据集成展示&#xff0c;实时监控和分析环境与设施状况&#xff0c;提升管理效能和安全水平&#xff0c;实现智慧园区的全方位智能化运营。

属性加密技术:保障数据安全的新利器

随着信息技术的飞速发展&#xff0c;数据安全已成为我国乃至全球关注的焦点。在众多数据安全技术中&#xff0c;属性加密技术以其独特的优势&#xff0c;逐渐成为保障数据安全的新利器。本文将从属性加密技术的原理、特点及其应用场景三个方面进行介绍&#xff0c;以期为读者提…

SpringBoot 集成Swagger在线接口文档 接口注解

介绍 Swagger接口文档是一种自动生成、描述、调用和可视化的RESTful风格Web服务接口文档的工具。它通过一系列的规范和自动化工具&#xff0c;极大地简化了后端开发人员与前端开发人员之间的协作。 依赖 <!--swagger--> <dependency><groupId>io.springfo…

高考志愿填报,选热门专业还是选自己喜欢的专业

对于每一个结束高考的学生来说&#xff0c;都要面临选专业这个严峻的挑战。选专业可以说是妥妥的大工程&#xff0c;因为这关系到接下来的几年要学什么内容&#xff0c;关键是未来的几十年要从事什么样的工作。 所以在谈及选专业这个问题的时候&#xff0c;每个人的内心都有些…

加权 KNN 算法的原理与详解

加权kNN&#xff0c;k近邻算法的增强改进版本。 加权KNN算法 近邻算法&#xff08;k-Nearest Neighbors, kNN&#xff09;是一种用于分类和回归的非参数方法。它的基本思想是“看邻居”&#xff0c;即通过查找离目标点最近的 K 个数据点&#xff0c;来判断目标点的类别或数值。…

kimi,让论文写作不再是一场苦旅【下】

学境思源&#xff0c;一键生成论文初稿&#xff1a; AcademicIdeas - 学境思源AI论文写作 今天我们继续昨天的内容&#xff1a;kimi&#xff0c;让论文写作不在是一场苦旅【上】&#xff0c;为大家列举与Kimi互动的示例。 8. 文献综述&#xff1a; 1. 文献搜索策略&#xff1…

育才兴业,助力数字产业蓬勃发展

成都树莓集团通过校企合作、建设人才项目转化中心、推动一线多园战略以及提供全方位服务等举措&#xff0c;积极培养数字产业人才&#xff0c;为行业发展提供了有力支持。 一、校企合作&#xff0c;打造人才培养高地 树莓集团深知企业协同育人的重要性&#xff0c;积极与高校建…

ppt接单渠道大公开‼️

PPT 接单主要分两种&#xff1a;PPT 模板投稿和PPT 定制接单&#xff0c;我们先从简单的 PPT 模板投稿说起。 PPT 模板投稿 利用业余时间&#xff0c;做一些 PPT 模板上传到平台&#xff0c;只要有人下载你的模板&#xff0c;你就有收入。如果模板质量高&#xff0c;简直就是一…

Python特征工程 — 1.3 对数与指数变换

目录 1 对数变换 1.1 对数变换的概念 1.2 对数变换实战 2 指数变换 2.1 指数变换的概念 2.2 指数变换实战 3 Box-Cox变换 3.1 Box-Cox变换概念 3.2 Box-Cox变换实战 1 对数变换 1.1 对数变换的概念 特征对数变换和指数变换是数据预处理中的两种常用技术&#xff0c;…

制造企业真的需要数字化转型吗?一文讲透:为何做,如何做?

此前拜访了不少制造企业&#xff0c;其以中小型企业居多&#xff0c;在与企业负责人交流数字化转型话题时&#xff0c;感触最多的还是管理者对“数字化转型”的认知。 在数字化转型方面从国家层面到地方政府进行大量的宣传与政策支持&#xff0c;部分行业头部企业也从数字化转…

Appium Inspector介绍和使用

一、什么是Appium Inspector 官方介绍&#xff1a;Overview - Appium Inspector 检查器的主要目的是提供应用程序页面源代码的检查功能。它主要用于测试自动化开发&#xff0c;但也可用于应用程序开发 - 或者如果只是想查看应用程序的页面源代码&#xff01; 从本质上讲&…

RK3568驱动指南|第十六篇 SPI-第192章 mcp2515驱动编写:完善write和read函数

瑞芯微RK3568芯片是一款定位中高端的通用型SOC&#xff0c;采用22nm制程工艺&#xff0c;搭载一颗四核Cortex-A55处理器和Mali G52 2EE 图形处理器。RK3568 支持4K 解码和 1080P 编码&#xff0c;支持SATA/PCIE/USB3.0 外围接口。RK3568内置独立NPU&#xff0c;可用于轻量级人工…

Reid系列论文学习——无人机场景下基于 Transformer 的轻量化行人重识别

今天介绍的一篇论文是针对无人机场景下的行人重识别&#xff0c;论文题目为&#xff1a;"无人机场景下基于 Transformer 的轻量化行人重识别"。该论文针对无人机场景下行人呈现多角度多尺度的特点、以及传统CNN网络在行人重识别任务中受限于感受野和下采样导致的无法…

Git 操作总结

1. 安装、Git 环境配置 1.1 安装 Git 官方版本可以在 Git 官方网站下载&#xff1a;打开 https://git-scm.com/download/win&#xff0c;选择相应版本即可。 Git 安装完成后&#xff0c;可以在开始菜单中看到 Git 的三个启动图标&#xff08;Git Bash、Git CMD、Git GUI&…

关于5G和卫星

手机&#xff0c;已经串联起了我们生活中的一切环节。我们随时随地拿出手机&#xff0c;都能畅快地上网。 这一切是如此地理所当然&#xff0c;以至于我们甚至想不到这样不可思议的问题&#xff1a; 移动通信网络真的无处不在吗&#xff1f; 我们都知道&#xff0c;地球虽叫…