For AI agents: the complete documentation index is available at /next/zh/llms.txt, the full documentation bundle is available at /next/zh/llms-full.txt, and this page is available as Markdown at /next/zh/react/introduction.md.
  • 简体中文
  • ReactLynx 是什么?

    ReactLynx 是 Lynx 的官方 React 框架。它允许你用 React 的心智模型开发 Lynx 原生应用。

    和在 Web 上使用 React 一样,使用 ReactLynx 时,你可以使用 JSX 和 React 组件来构建你的 UI。ReactLynx 会将你的 React 代码转换为对 Lynx Engine 命令式 API 的调用,从而实现原生 UI 的渲染。

    主要功能

    ReactLynx 本身是“地道”的 React,但也开创性地引入了类似“双线程 React”、“JSX 常量折叠”等优化,

    • “地道”React:ReactLynx 是 React 的一个实现,本质上基于 Preact,因此和 React 有基本一致的 API 和行为,此一致性使得很多生态建设可以复用。
    • 双线程编程思想:ReactLynx 遵循 React 的编程模型,但通过利用 Lynx 提供的双线程运行时,结合自身的编程范式(或规则)来实现更好的性能和用户体验。
      • Off-main-thread Reconciliation:ReactLynx 通过将部分 Reconciliation 逻辑放到后台线程,以减少主线程的计算量,提升性能。
      • 双线程架构下的生命周期:由于 Lynx 的双线程架构特点,ReactLynx 的生命周期与传统 React 在调用时机上存在一些差异。
    • JSX 常量折叠:ReactLynx 会在编译时折叠 JSX 常量,以减少运行时的计算。

    如果你是 React Web 开发者

    需修改包名

    由于和 react 有基本一致的 API,你可以直接将 react 替换为 @lynx-js/react,然后继续使用你熟悉的 React API。

    - import { useState } from 'react';
    + import { useState } from '@lynx-js/react';

    有关 ReactLynx 实现的 API 的完整列表,请参阅 @lynx-js/react API 文档

    不同的元件集合

    不同于 Web 上的 divspan 等元素,Lynx 提供了一套元素标签集合,例如 viewtextimage 等(完整列表)。 在 ReactLynx 中,你可以组合使用这些元素标签来构建你的原生应用。

    - <div className="..." />
    + <view className="..." />

    虽然元件的命名类似于 React Native,但是 ReactLynx 有一些不同之处:

    - import {View, Text, Image} from 'react-native';
    - <View style={{...}} />
    + <view style={{...}} />

    不同的事件命名

    基于 Lynx,ReactLynx 使用了一套不同于 Web 的事件命名(前往事件了解更多)。

    事件传播也有所不同

    对于 Web 上常用的 e.stopPropagation()e.preventDefault() 等方法,Lynx 仅在主线程脚本中支持 e.stopPropagation()。 但是 Lynx 的事件传播机制仍允许你实现和 Web 上类似的功能或效果。

    - <button onTouchStart={...} />
    + <view bindtouchstart={...} catchtouchstart={...}/>

    没有 documentwindow

    Lynx 尚未提供 documentwindow 对象,因此 ReactLynx 也不支持这两个对象。

    没有“DOM”?

    Lynx Engine 提供了一套 Low Level 的 Element API, 允许框架开发者通过运行在主线程的 JavaScript 创建 UI。 但这套 API 并不向所有开发者开放。 Lynx 鼓励开发者尽可能使用声明式的方式来构建 UI,而不是直接操作 DOM。 但也提供直接操作节点的能力和主线程脚本, 一般用来帮助开发者在实现一些复杂交互时,依然可以保持接近原生的用户体验。

    这意味着你无法使用任何依赖于 documentwindow 的库。

    一般来说,你可以通过以下两种方式来解决这个差异:

    • 大多数情况下,Lynx 以不同的 API 提供某个功能,例如你可以使用 lynx 对象下的 API,以 lynx.reload 替代 window.location.reload()
    • 偶尔 Lynx 并未提供某个功能,你可以使用 Lynx 的 NativeModules自定义元件来扩展 Lynx 的能力。

    下一步

    进一步学习 ReactLynx

    学习 Lynx 基础

    磨刀不误砍柴工。


    除非另有说明,本项目采用知识共享署名 4.0 国际许可协议进行许可,代码示例采用 Apache License 2.0 许可协议进行许可。