React Native 面试题及答案

lukyyIP属地: 上海
字数 2,037

基础概念

1. 什么是React Native?

答案:React Native是Facebook开发的一个开源框架,用于使用JavaScript和React构建原生移动应用程序。它允许开发者使用相同的代码库为iOS和Android平台开发应用,同时提供接近原生应用的性能和用户体验。

2. React Native和React有什么区别?
  • React用于构建Web应用,而React Native用于构建移动应用
  • React使用DOM和HTML标签,React Native使用原生组件
  • React Native包含一些移动特定的API(如摄像头、地理位置等)
  • React Native需要原生编译,而React直接在浏览器中运行
3. React Native的工作原理是什么?

答案:React Native使用JavaScriptCore引擎运行JavaScript代码,通过"桥接"(Bridge)机制与原生平台通信。UI组件被映射到原生组件,JavaScript线程和原生UI线程通过异步JSON消息进行通信。

4. 什么是JSX?

答案:JSX是JavaScript XML的缩写,是一种在JavaScript中编写类似HTML的语法扩展。它最终会被转译为React.createElement()调用,用于描述UI的结构。

5. React Native中的组件生命周期有哪些?
  • 挂载阶段:constructor() → static getDerivedStateFromProps() → render() → componentDidMount()
  • 更新阶段:static getDerivedStateFromProps() → shouldComponentUpdate() → render() → getSnapshotBeforeUpdate() → componentDidUpdate()
  • 卸载阶段:componentWillUnmount()

核心组件与API

6. React Native中的核心组件有哪些?

答案

  • 基本组件:View, Text, Image, ScrollView, TextInput
  • 列表组件:FlatList, SectionList
  • 交互组件:Button, TouchableOpacity, TouchableHighlight
  • 其他:ActivityIndicator, Modal, StatusBar, Switch
7. FlatList和ScrollView有什么区别?

答案

  • FlatList用于渲染长列表数据,只渲染当前可见项,性能更好
  • ScrollView会一次性渲染所有子组件,适合内容不多的滚动视图
  • FlatList支持分页加载、下拉刷新等列表特定功能
8. 如何在React Native中处理用户输入?
  • 使用TextInput组件获取文本输入
  • 使用Button或Touchable系列组件处理按钮点击
  • 使用PanResponder处理复杂手势
  • 使用onChangeText、onPress等回调处理用户交互

9. 什么是Flexbox布局?React Native中如何使用?

答案:Flexbox是一种CSS布局模型,React Native使用它来构建界面布局。主要属性包括:

  • flex: 定义元素的伸缩能力
  • flexDirection: 主轴方向(row/column)
  • justifyContent: 主轴对齐方式
  • alignItems: 交叉轴对齐方式
  • flexWrap: 是否换行

10. 如何在React Native中处理图片?

答案

  • 使用Image组件显示图片
  • 本地图片使用require()引入
  • 网络图片使用uri属性指定URL
  • 可以设置resizeMode控制图片显示方式
  • 使用ImageBackground组件实现背景图片

状态管理与数据流

11. React Native中的状态(state)和属性(props)有什么区别?

答案

  • state是组件内部管理的可变数据
  • props是从父组件传递下来的不可变数据
  • 使用this.setState()更新state会触发重新渲染
  • props变化也会触发重新渲染
  • state适用于组件私有数据,props用于组件间通信

12. 什么是Context API?何时使用?

答案:Context API是React提供的一种跨组件层级传递数据的方式,避免"prop drilling"问题。适用于需要在组件树中多个层级共享的数据,如主题、用户认证状态等。

13. Redux在React Native中如何使用?

答案

  1. 安装redux和react-redux
  2. 创建store、reducers和actions
  3. 使用Provider包裹根组件
  4. 使用connect或hooks(useSelector, useDispatch)连接组件
  5. 在组件中dispatch actions和访问state

14. React Hooks有哪些常用API?

答案

  • useState: 管理组件状态
  • useEffect: 处理副作用
  • useContext: 访问context
  • useReducer: 复杂状态逻辑
  • useCallback: 记忆函数
  • useMemo: 记忆值
  • useRef: 访问DOM或保存可变值

15. 如何优化React Native应用的性能?

答案

  • 使用PureComponent或React.memo减少不必要的渲染
  • 正确使用key属性优化列表渲染
  • 避免内联函数和对象
  • 使用useCallback和useMemo记忆计算结果
  • 减少桥接通信,避免频繁更新
  • 使用Hermes引擎提升JS执行性能

导航与路由

16. React Navigation有哪些常用导航器?

答案

  • Stack Navigator: 提供基于堆栈的导航,新屏幕从右侧滑入
  • Tab Navigator: 底部或顶部标签导航
  • Drawer Navigator: 侧边抽屉导航
  • Native Stack Navigator: 使用原生导航组件,性能更好

17. 如何在React Native中实现页面跳转?

答案
使用React Navigation时:

navigation.navigate('RouteName', { params });

也可以使用:

navigation.push('RouteName'); // 允许重复跳转同一页面
navigation.goBack(); // 返回上一页

18. 如何传递参数给路由?

答案
跳转时传递:

navigation.navigate('RouteName', { key: value });

接收参数:

const { key } = route.params;

19. 什么是深层链接(Deep Linking)?

答案:深层链接是指通过URL直接打开应用并导航到特定内容的功能。React Navigation提供了linking配置来处理深层链接,将URL映射到特定的导航状态。

20. 如何处理Android的返回按钮?

答案

  • 使用BackHandler API
  • 在React Navigation中使用headerLeft自定义返回按钮
  • 监听硬件返回按钮事件并处理

原生交互与模块

21. 什么是原生模块?如何创建?

答案:原生模块是React Native调用原生平台功能的桥梁。创建步骤:

  1. 创建继承ReactContextBaseJavaModule的Java类(Android)
  2. 创建实现RCTBridgeModule协议的Objective-C类(iOS)
  3. 使用@ReactMethod注解暴露方法
  4. 注册模块
  5. 在JavaScript中通过NativeModules访问

22. 如何调试React Native应用?

答案

  • 使用Chrome开发者工具调试JavaScript
  • 使用React Native Debugger独立应用
  • 使用Flipper进行高级调试
  • 使用console.log输出日志
  • 使用React DevTools检查组件层次结构
  • 开启远程调试JS

23. 什么是Code Push?

答案:Code Push是微软提供的服务,允许开发者绕过应用商店直接向用户推送JavaScript代码和资源更新,实现热更新。

24. 如何处理不同平台的代码差异?

答案

  • 使用Platform模块检测平台
  • 使用文件后缀(.ios.js/.android.js)区分平台代码
  • 使用条件渲染
  • 创建平台特定的组件封装

25. 如何集成第三方原生库?

答案

  1. 使用npm/yarn安装JavaScript部分
  2. 链接原生依赖(react-native link或自动链接)
  3. 对于iOS可能需要pod install
  4. 可能需要手动配置(Android的gradle,iOS的podfile等)
  5. 遵循库的文档进行初始化

高级主题

26. 什么是Hermes引擎?

答案:Hermes是Facebook优化的JavaScript引擎,专门针对React Native应用优化,可提高启动时间、减少内存使用和缩小应用体积。

27. 如何实现动画效果?

答案

  • 使用Animated API创建基本动画
  • 使用LayoutAnimation实现布局变化动画
  • 使用react-native-reanimated库实现高性能动画
  • 使用Lottie渲染After Effects动画

28. 什么是Fast Refresh?

答案:Fast Refresh是React Native的开发功能,可以在保存文件时快速更新应用,保持组件状态,提高开发效率。

29. 如何处理离线数据?

答案

  • 使用AsyncStorage存储简单数据
  • 使用SQLite或realm处理结构化数据
  • 使用redux-persist持久化Redux状态
  • 实现离线优先策略,网络恢复后同步

30. React Native的未来发展趋势是什么?

答案

  • 新架构(Fabric、TurboModules、JSI)提升性能
  • 更好的TypeScript支持
  • 更紧密的原生集成
  • 改进的热更新和部署流程
  • 更丰富的原生组件和API
  • 更强大的调试工具

希望这些问题和答案能帮助你准备React Native面试!根据具体职位要求,可能需要深入某些特定领域。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
1人点赞
总资产96共写了17.6W字获得284个赞共266个粉丝
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 228,461评论 6 532
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 98,538评论 3 417
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 176,423评论 0 375
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 62,991评论 1 312
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 71,761评论 6 410
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 55,207评论 1 324
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 43,268评论 3 441
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 42,419评论 0 288
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 48,959评论 1 335
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 40,782评论 3 354
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 42,983评论 1 369
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 38,528评论 5 359
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 44,222评论 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 34,653评论 0 26
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 35,901评论 1 286
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 51,678评论 3 392
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 47,978评论 2 374

推荐阅读更多精彩内容