React Native 不把页面塞进 WebView,而是把 JS 组件树桥接到 iOS 与 Android 的真实原生控件:你写一个 View,屏幕上是原生的 UIView 或 ViewGroup。触感与滚动惯性接近原生,一套 JS 逻辑跨两端复用,热更新也比发版灵活。Instagram、Discord 等大型 App 都在用它。
它的成本在边界地带:涉及相册、推送、支付等系统能力时要写原生模块或找社区轮子;性能敏感的列表、动画需要小心优化,遇到疑难问题往往得查原生侧。新架构 Fabric/TurboModules 正在重写通信层,但学习曲线始终比纯 Web 陡。
// React Native 组件写法(示意,跑在 RN 运行时而非浏览器) // 一个简单的待办列表 import React from 'react'; import { View, Text, FlatList, TouchableOpacity } from 'react-native'; var todos = [{ id: '1', text: '学 React' }, { id: '2', text: '写 App' }]; export default function App() { var [done, setDone] = React.useState({}); var renderItem = function (_a) { var item = _a.item; return ( <TouchableOpacity onPress={function () { setDone(Object.assign({}, done, { [item.id]: !done[item.id] })); }}> <View style={{ padding: 12 }}> <Text style={{ textDecorationLine: done[item.id] ? 'line-through' : 'none' }}> {done[item.id] ? '完成 ' : ''}{item.text} </Text> </View> </TouchableOpacity> ); }; return <FlatList data={todos} keyExtractor={function (i) { return i.id; }} renderItem={renderItem} />; }