前端面试题——RN篇


前言

下面一起看看关于RN的高频面试题,有需要的小伙伴可以收藏,需要的时候看看


1.RN和React有什么区别

  1. React 是一个用于构建网页应用用户界面的库,而 React Native 是一个用于构建原生移动应用程序的框架。
  2. React Native 使用原生组件和 API 来渲染应用,而 React 使用 HTML 和 CSS。

2.RN核心组件

View、Text、Image、ScrollView、FlatList

3.scrollView和FlatList区别

scrollView

  • 适合用于展示较小的数据集或者固定内容,不适合大数据量的列表
  • 在内容较多时性能较差,因为它会一次性渲染所有子组件,这可能导致内存占用高和滚动卡顿
  • 适合用于展示包含多种子组件的固定内容页面,如表单、静态信息等

List item

  • 专为渲染长列表数据而设计,适合用于展示动态数据
  • 高效,因为它只渲染当前屏幕上可见的项,并且会随着用户滚动动态加载更多项
  • 适合用于展示大量数据列表,如消息列表、联系人列表等

4.RN应用导航

  • React Native 提供了几个导航库,其中最受欢迎的是 React Navigation
  • React Navigation 允许开发者使用各种导航器(如 StackNavigatorDrawerNavigatorTabNavigator)来处理应用中的导航

5.虚拟dom

作用

提升UI渲染的性能和开发效率

是什么

虚拟DOM是对实际DOM的抽象表示。它是一种轻量级的、用JavaScript对象表示的树结构,反映了UI的状态。
每次UI发生变化时,React首先更新虚拟DOM,然后将虚拟DOM与实际DOM进行对比,只更新需要改变的部分。

目的是什么

操作真实的DOM是昂贵的,因为每次更新DOM都会引发浏览器的重绘(repaint)和回流(reflow)操作,影响性能。
虚拟DOM通过减少对真实DOM的直接操作,显著提升了性能。

工作原理

  1. 初次渲染:React组件首次渲染时,会创建虚拟DOM树,并将其转换为真实DOM树,插入到页面中
  2. 状态变化:当组件的状态或属性发生变化时,React会创建一个新的虚拟DOM树,代表最新的UI状态
  3. 差异比较(Diffing):React使用一种高效的算法比较新旧两个虚拟DOM树,找出变化的部分。这一过程称为“调和”(Reconciliation)。React的Diff算法假设同级元素之间可以进行对比,但跨级比较的成本太高,因此它主要比较同一级别的节点。
  4. 补丁:根据差异比较的结果,React生成一组最小的操作,用来更新真实DOM。这些操作被称为“补丁”。React将这些补丁应用到真实DOM中,只更新那些实际需要变化的部分,而不是整个DOM树。

6.RN相对于原生的ios和Android有哪些优/劣势

优势

  1. 跨平台开发:一次编写,随处运行
  2. 开发效率:自身支持热加载
  3. JS生态支持:丰富的库和工具,前端开发经验
  4. 性能:接近原生的性能,通过桥接(Bridge)技术,可以调用原生组件
  5. 活跃的社区:社区活跃及背靠Facebook

劣势

  1. 性能:原生性能差距:在高性能的需求应用中,如复杂的动画,大量数据处理,图形密集应用(如游戏)等,性能不如原生;启动时间长,因为需要加载JS引擎和解析JS代码
  2. 原生模块依赖:默写功能可能需要编写原生模块来实现,如访问特定的硬件功能(如蓝牙、nfc),需要开发者具备原生的开发能力
  3. 开发环境:在某些情况下,配置和管理IOS和Android的开发环境较繁琐

7.RN生命周期

  1. 挂载:constructor()、componentDidMount()
  2. 更新:componentDidUpdate()shouldComponentUpdate()
  3. 卸载:componentWillUnmount()

8.li列表中有3条数据,删除第二条会发生什么

一、更新状态
组件的UI是由状态驱动的,当状态发生变化时,rn会重新渲染组件,反应最新的状态

  1. 创建新的状态
  2. 触发重新渲染

二、渲染流程
当状态更新时,RN会执行一下步骤

  1. 比较新旧状态:比较新状态和旧状态,确定哪些部分发生了变化。这种比较基于虚拟 DOM
  2. 生成更新后的虚拟DOM:根据新的状态,React 生成一个更新后的虚拟 DOM 表示新的 UI 结构
  3. 更新真实DOM:React 将虚拟 DOM 与真实 DOM 进行对比(Reconciliation),并找出需要更新的部分。只有发生变化的部分(在这个例子中是第二个 li 元素)会被更新到真实 DOM。

三、视图更新

  1. 旧元素移除:在新的状态下,不再包含第二个列表项,因此 React Native 会从视图层移除对应的组件。
  2. 其它元素重排:剩余的元素会重新排列。例如,第三个列表项会移动到第二个位置。

9.RN性能优化

  1. 使用 FlatList 组件 :高效渲染大列表。
  2. 优化图片 :压缩图片并使用适当的图片格式。
  3. 减少重新渲染 :使用 shouldComponentUpdateReact.memo 来防止不必要的重新渲染。
  4. 优化状态管理 :最小化状态更新和重新渲染的次数。

10.下拉刷新

rn中通过 RefreshControl组件可以实现

步骤:

  1. 捕获下拉手势:监听用户的下拉手势,通常是通过监听 touchstarttouchmovetouchend事件来实现。
  2. 显示刷新指示器:当检测到下拉手势时,显示一个刷新指示器(通常是一个旋转的图标)。
  3. 触发数据刷新:当手势超过一定阈值时,触发数据刷新逻辑,从服务器或本地获取最新数据。
  4. 更新列表和隐藏指示器:数据刷新完成后,更新列表数据,并隐藏刷新指示器。

11.上拉加载

使用 FlatList 组件的 onEndReached 属性,这个属性允许你在用户滚动到列表底部时触发一个函数,从而进行数据加载

可以通过 ScrollView 组件的 onScroll 属性来实现。onScroll 事件提供了滚动视图的当前位置信息,你可以通过它来获取滚动的高度或位置。

  • 4
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小童不学前端

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值