初级 React Native 开发者面试题与答案

Milad Bonakdar
作者
练习初级 React Native 面试题,覆盖组件、Hooks、导航、API 请求、列表、AsyncStorage 和移动开发基础。
介绍
初级 React Native 面试通常会考察你是否能用 React 构建简单的移动端页面,解释原生渲染,用 Hooks 管理状态,在页面之间导航,请求 API 数据,并保存非敏感的本地数据。好的回答应该很实用:你会用什么、什么时候不用、它在 iOS 和 Android 上带来什么取舍。
这份指南帮助你练习第一份 React Native 岗位中最可能出现的问题。与其死记库的细节,不如重点掌握 React 基础、核心组件、导航、表单、列表、API 请求、存储和移动端调试。
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 如何使用它?
答案: Virtual DOM 是 React Web 开发中的概念:React 维护一个轻量级 UI 树,在状态变化后进行比较,并只更新发生变化的部分。在 React Native 中,同样的 reconciliation 思路仍然适用,但最终输出的是原生视图,而不是浏览器 DOM 节点。
- 面试中可以这样说:
- 状态变化会触发受影响组件重新渲染
- React 会把新的组件树和之前的组件树进行比较
- React Native 会把必要更新应用到原生 UI 组件
- 仍然要通过稳定的 key、合理放置 state,以及只在真正解决重渲染问题时使用 memoization 来优化
- 重要纠正: React Native 不会更新 HTML 或浏览器 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 是一个异步 key-value 存储,适合保存少量、非敏感数据。
- 适合场景: 主题选择、引导流程标记、缓存 JSON、简单偏好设置
- 避免用于: 认证 token、API key、密码、大型数据集,以及需要复杂查询的数据
- 敏感数据: 使用平台支持的安全存储,例如通过维护良好的库接入 iOS Keychain 或 Android 加密存储
稀有度: 非常常见 难度: 简单
19. FlatList 和 ScrollView 之间有什么区别?
答案:
- ScrollView:
- 一次渲染所有子项
- 适用于小型列表
- 对于大型列表来说,占用大量内存
- FlatList:
- 仅渲染可见项目(懒加载)
- 适用于大型列表
- 内置优化
稀有度: 非常常见 难度: 简单
20. 如何处理表单和用户输入?
答案: 使用带有状态的受控组件。
稀有度: 非常常见 难度: 中等


