初级 React Native 开发者面试题:完整指南

Milad Bonakdar
作者
掌握 React Native 开发基础知识,包含针对初级开发者的 React 基础、组件、导航、状态管理和移动特定概念等重要面试问题。
介绍
React Native 使开发人员能够使用 JavaScript 和 React 构建原生移动应用程序。通过单个代码库,您可以为 iOS 和 Android 创建应用程序,这使其成为跨平台移动开发的强大选择。
本指南涵盖了初级 React Native 开发人员的基本面试问题。我们将探讨 React 基础知识、组件、钩子、导航、状态管理和移动特定概念,以帮助您为您的第一个 React Native 开发人员角色做好准备。
React 基础知识 (6 个问题)
1. 什么是 React Native?它与 React 有何不同?
答案:
- React: 用于构建 Web 用户界面的 JavaScript 库
- React Native: 使用 React 构建原生移动应用程序的框架
- 主要区别:
- React Native 渲染到原生组件(而不是 DOM)
- 使用原生 API 而不是 Web API
- 不同的样式方法(没有 CSS,使用 StyleSheet)
- 针对 iOS 和 Android 的平台特定代码
稀有度: 非常常见 难度: 简单
2. React Native 中的核心组件有哪些?
答案: React Native 提供了映射到原生 UI 元素的内置组件:
- View: 容器组件(类似于 Web 中的
div) - Text: 显示文本(所有文本都必须在
Text组件中) - Image: 显示图像
- ScrollView: 可滚动容器
- TextInput: 文本输入字段
- TouchableOpacity/Pressable: 可触摸元素
- FlatList: 高效的列表渲染
- Button: 基本按钮组件
稀有度: 非常常见 难度: 简单
3. 解释 View 和 ScrollView 之间的区别。
答案:
- View: 静态容器。超出屏幕范围的内容不可滚动。
- ScrollView: 可滚动容器。一次渲染所有子项(对于大型列表来说,可能会占用大量内存)。
- 何时使用:
- View: 用于适合屏幕的布局
- ScrollView: 用于少量可滚动内容
- FlatList: 用于大型列表(仅渲染可见项目)
稀有度: 非常常见 难度: 简单
4. 什么是 React Hooks?哪些是最常用的?
答案: Hooks 是允许您在函数组件中使用状态和生命周期特性的函数。
- 常用 Hooks:
- useState: 管理组件状态
- useEffect: 处理副作用(数据获取、订阅)
- useContext: 访问上下文值
- useCallback: 记忆函数
- useMemo: 记忆昂贵的计算
- useRef: 引用 DOM 元素或持久化值
稀有度: 非常常见 难度: 简单
5. 解释 useEffect 钩子及其依赖项数组。
答案:
useEffect 在渲染后运行副作用。依赖项数组控制其运行时间:
- 没有数组: 每次渲染后运行
- 空数组
[]: 在初始渲染后运行一次 - 带有依赖项
[dep1, dep2]: 当依赖项更改时运行
稀有度: 非常常见 难度: 中等
6. 什么是虚拟 DOM?React 如何使用它?
答案: 虚拟 DOM 是实际 DOM 的轻量级 JavaScript 表示。
- 过程:
- 当状态更改时,React 会创建一个新的虚拟 DOM 树
- 将其与先前的虚拟 DOM 进行比较(差异比较)
- 计算所需的最小更改
- 仅更新实际 DOM 中已更改的部分
- 好处: 高效更新,更好的性能
稀有度: 常见 难度: 简单
组件和 Props (4 个问题)
7. Props 和 State 之间有什么区别?
答案:
- Props:
- 从父组件传递到子组件
- 只读(不可变)
- 用于组件配置
- State:
- 在组件内管理
- 可变(可以更改)
- 用于动态数据
稀有度: 非常常见 难度: 简单
8. 什么是函数组件与类组件?
答案:
- 函数组件:
- 语法更简单
- 使用 hooks 进行状态和生命周期管理
- 在现代 React 中首选
- 类组件:
- 较旧的方法
- 使用
this.state和生命周期方法 - 仍然支持,但不太常见
稀有度: 常见 难度: 简单
9. 如何将数据从子组件传递到父组件?
答案: 使用作为 props 传递的回调函数。
稀有度: 非常常见 难度: 简单
10. 什么是 key prop?为什么它很重要?
答案:
key prop 帮助 React 识别列表中哪些项目已更改、添加或删除。
- 目的: 优化渲染性能
- 要求: 在同级元素中必须是唯一的,稳定的(如果列表可以更改,请不要使用索引)
稀有度: 非常常见 难度: 简单
样式和布局 (3 个问题)
11. 如何在 React Native 中设置组件样式?
答案: React Native 使用 JavaScript 对象进行样式设置,而不是 CSS。
- StyleSheet API: 创建优化的样式
- 内联样式: 直接样式对象(性能较低)
- Flexbox: 默认布局系统
稀有度: 非常常见 难度: 简单
12. 解释 React Native 中的 Flexbox。
答案: Flexbox 是 React Native 中的主要布局系统。
- 主要属性:
- flexDirection:
row或column(默认:column) - justifyContent: 沿主轴对齐
- alignItems: 沿交叉轴对齐
- flex: 比例大小
- flexDirection:
稀有度: 非常常见 难度: 中等
13. margin 和 padding 之间有什么区别?
答案:
- Padding: 组件内部的空间(内容和边框之间)
- Margin: 组件外部的空间(组件和相邻组件之间)
稀有度: 常见 难度: 简单
导航 (3 个问题)
14. 什么是 React Navigation?如何使用它?
答案: React Navigation 是 React Native 最流行的导航库。
- 类型:
- Stack Navigator: 屏幕堆栈(push/pop)
- Tab Navigator: 底部标签栏
- Drawer Navigator: 侧边抽屉菜单
稀有度: 非常常见 难度: 中等
15. 如何在屏幕之间传递参数?
答案:
使用带有第二个参数的 navigate 函数来传递数据。
稀有度: 非常常见 难度: 简单
16. 什么是导航选项?如何自定义标题栏?
答案: 导航选项控制屏幕外观和行为。
稀有度: 常见 难度: 简单
数据和存储 (4 个问题)
17. 如何在 React Native 中从 API 获取数据?
答案:
使用 fetch API 或像 Axios 这样的库。
稀有度: 非常常见 难度: 中等
18. 什么是 AsyncStorage?如何使用它?
答案: AsyncStorage 是一个用于 React Native 的简单、异步的键值存储系统。
- 用例: 用户偏好设置、令牌、小数据
- 不适用于: 大型数据集、复杂查询(改用 SQLite)
稀有度: 非常常见 难度: 简单
19. FlatList 和 ScrollView 之间有什么区别?
答案:
- ScrollView:
- 一次渲染所有子项
- 适用于小型列表
- 对于大型列表来说,占用大量内存
- FlatList:
- 仅渲染可见项目(懒加载)
- 适用于大型列表
- 内置优化
稀有度: 非常常见 难度: 简单
20. 如何处理表单和用户输入?
答案: 使用带有状态的受控组件。
稀有度: 非常常见 难度: 中等



