Skip to main content

React Native 转 Flutter 学习路线

如果面试官问 "React Native 转 Flutter 难吗?""你是 React Native,为什么能做 Flutter?",这是近两年前端岗位很常见的问题。

对于已经有 React Native + TypeScript + 原生开发(iOS/Android) 经验的人来说,Flutter 的学习成本并不高,真正需要学习的是 Dart + Flutter Widget 思维

下面按面试角度整理,左列为 React Native,右列为 Flutter,方便对照查看。

详细 API 对照与逐条代码示例,见 Flutter 官方文档:给 React Native 开发者的 Flutter 指南。本文侧重学习路线与面试表达;官方文档可作为查询手册(Dart 语法、Widget 对照表、导航、手势、表单、动画等)。


学习路线总览

阶段React NativeFlutter预估时间
1TypeScript / JavaScriptDart1~2 天
2组件 + Virtual DOM 思维Widget + RenderObject 思维3~5 天
3useEffect 生命周期initState / dispose1 天
4Redux / Zustand / ContextRiverpod / Bloc2 天
5React Navigationgo_router1 天
6axiosdio0.5 天
7MMKV / AsyncStorageHive / SharedPreferences1 天
8ReanimatedAnimationController3 天
9Native Module / JSIPlatform Channel / FFI已有原生经验则很快
10Metro / npmflutter tool / pub1 天

第一阶段:Dart(1~2 天)

React Native 开发者基本已经有 JS/TS 基础,Dart 和 TypeScript 非常像。

TypeScript

class User {
name: string

constructor(name: string) {
this.name = name
}
}

Dart

class User {
String name;

User(this.name);
}
React Native 侧(已有)Flutter 侧(需补)
TypeScript 类型系统null safety
PromiseFuture
async/awaitasync/await(语法几乎一致)
EventEmitter / ObservableStream
Extension
泛型泛型
mixin

基本一天就能上手。


第二阶段:理解 Flutter 思维(重点)

常用组件对照

React NativeFlutter说明
<View>Container / Column / Row / Center / Padding布局容器,按场景选型
<Text>Text
<Image>Image / Image.asset / Image.network
<ScrollView>ListView少量子项
<FlatList>ListView.builder长列表按需构建
<TouchableOpacity>GestureDetector / TextButton / ElevatedButton点击用 Button 或 GestureDetector
<Button>ElevatedButton / TextButton
<TextInput>TextField + TextEditingController
<Switch>Switch
<ActivityIndicator>CircularProgressIndicator / LinearProgressIndicator
<RefreshControl>RefreshIndicator下拉刷新
<Modal>ModalRoute
Scaffold页面骨架(AppBar、Drawer 等)

渲染架构对照

React Native

React

Virtual DOM

Bridge

Native View

Flutter

Widget

Element

RenderObject

Skia

GPU
维度React NativeFlutter
是否有 DOM无(但有 Bridge 到 Native View)
组件本质描述 UI 的 React 元素Widget 只是配置
真正负责布局Yoga + Native ViewRenderObject
更接近的框架Compose / SwiftUI / Jetpack Compose

Flutter 没有 DOM,Widget 只是配置,真正负责布局的是 RenderObject


第三阶段:生命周期

React Native

useEffect(() => {
// mount / update

return () => {
// cleanup
}
}, [])

Flutter

@override
void initState() {
super.initState();
}

@override
void didUpdateWidget(covariant MyWidget oldWidget) {
super.didUpdateWidget(oldWidget);
}

@override
void dispose() {
super.dispose();
}
React NativeFlutter
useEffect(mount / deps 变化)initState / didUpdateWidget
cleanup 函数dispose

第四阶段:状态管理

React NativeFlutter
ReduxBloc
MobXMobX
Zustand
Jotai
ContextProvider
Riverpod(推荐)
GetX

目前企业里面:Riverpod 越来越多,Bloc 大厂很多。


第五阶段:导航

React NativeFlutter
React NavigationNavigator
go_router(推荐)
navigation.navigate('Screen')context.go('/path')
navigation.push('Screen')context.push('/path')

第六阶段:网络请求

React NativeFlutter
axiosdio
axios.get(...)dio.get(...)

几乎一样。

React Native

axios.get('/api/users')

Flutter

dio.get('/api/users')

第七阶段:本地存储

React NativeFlutter
MMKVHive
AsyncStorageSharedPreferences
SQLiteSQLite
Isar

第八阶段:动画

React NativeFlutter
AnimatedAnimationController
ReanimatedTween
AnimatedContainer
Hero

Flutter 自带动画系统,性能很好。


第九阶段:原生通信

React NativeFlutter
Native ModulePlatform Channel
TurboModuleMethodChannel
JSIEventChannel
FFI

如果你已经写过 Objective-C、Swift、Java、Kotlin,Flutter Platform Channel 非常容易。


第十阶段:工程化

React NativeFlutter
Metroflutter build / flutter tool
GradleGradle
CocoaPodsCocoaPods
FastlaneFastlane
package.jsonpubspec.yaml
npm / yarn / pnpmpub

RN 与 Flutter 综合对比

React NativeFlutter
JS RuntimeDart VM
ReactWidget
Virtual DOMElement Tree
Bridge(旧架构)无 Bridge
FabricRenderObject
YogaRenderObject Layout
JSXWidget Tree
Metroflutter tool
npmpub
ReduxRiverpod
React Navigationgo_router
AxiosDio
Native ModuleMethodChannel

延伸阅读:官方对照手册

给 React Native 开发者的 Flutter 指南 按主题组织,适合按需查阅:

主题覆盖内容
Dart 入门入口函数、变量、null safety、Future / async-await
项目结构main.dartpubspec.yaml、资源与依赖
视图与布局View 等价容器、FlatList、Canvas、Column / Row / Stack
风格与主题TextStyleThemeData、Icons / Colors
状态管理StatelessWidget / StatefulWidget 最佳实践
存储 / 导航 / 网络SharedPreferences、Navigator / Tab / Drawer、http
手势 / 表单 / 平台GestureDetectorTextField / FormTargetPlatform
调试 / 动画热重载、DevTools、AnimationController
Widget 对照表RN 组件与 Flutter Widget 完整映射

如果已经会 React Native,大概要多久?

模块预估时间
Dart2~3 天
Widget3~5 天
状态管理2 天
动画3 天
跟着完成一个项目约 1 周
能独立开发中小型 App2~4 周

如果已有 React Native、TypeScript、Swift、Kotlin、原生模块开发经验,迁移会更快。

如果还具备 React Native 新架构(TurboModule、JSI)、原生模块开发和跨平台架构设计经验,迁移会更快,因为很多能力(如状态管理、路由、网络、原生通信、构建流程)都是可迁移的。


面试如何回答(推荐)

我主要使用 React Native 做跨平台开发,同时也有 Swift、原生模块和工程化经验。Flutter 与 React Native 在开发模式上有不少共通点,比如组件化、声明式 UI、状态管理和跨平台架构。对我来说,最大的学习点是 Dart 语言和 Flutter 的 Widget/RenderObject 渲染机制,而不是移动端开发本身。我认为在完成一个实际项目后,大约 2~4 周可以达到能够独立开发业务功能的水平。如果团队使用 Flutter,我有信心快速完成技术迁移。