JS 框架 词条目录
前端Wiki/词条/React Native

React Native

定义用 React 的组件与声明式语法写移动 App,渲染层映射到平台原生组件而非 WebView

React Native 不把页面塞进 WebView,而是把 JS 组件树桥接到 iOS 与 Android 的真实原生控件:你写一个 View,屏幕上是原生的 UIView 或 ViewGroup。触感与滚动惯性接近原生,一套 JS 逻辑跨两端复用,热更新也比发版灵活。Instagram、Discord 等大型 App 都在用它。

它的成本在边界地带:涉及相册、推送、支付等系统能力时要写原生模块或找社区轮子;性能敏感的列表、动画需要小心优化,遇到疑难问题往往得查原生侧。新架构 Fabric/TurboModules 正在重写通信层,但学习曲线始终比纯 Web 陡。

JavaScript
// 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} />;
}
⚠ 常见误区
🔗 相关词条React组件通信
← 返回来源章节组件通信