简而言之
嗯.. 本质上,是的,就像 Reactjs 的 Virtual DOM 一样,React-Native 创建一个树层次结构来定义初始布局,并在每次布局更改时创建该树的差异以优化渲染。除了 React-Native 通过几个架构层管理 UI 更新之外,这些架构层最终会转换视图应该如何呈现,同时尝试将更改优化到最低限度,以提供尽可能快的呈现。
更详细的解释
为了了解 react native 如何在后台创建视图,您需要了解基础知识,为此,我宁愿从头开始
1.Yoga布局引擎
Yoga是一个用 C 语言编写的跨平台布局引擎,它通过绑定到本机视图(Java Android Views / Objective-C iOS UIKit)来实现 Flexbox 。
React-Native 中各种视图、文本和图像的所有布局计算都是通过瑜伽完成的,这基本上是我们的视图显示在屏幕上之前的最后一步
2.阴影树/阴影节点
当 react-native 发送命令来渲染布局时,一组影子节点被组装起来构建影子树,它代表了布局的可变原生端(即:用相应的原生语言编写,Java for Android 和 Objective-C对于 iOS),然后将其转换为屏幕上的实际视图(使用 Yoga)。
3. 视图管理器
ViewManger 是一个接口,它知道如何将从 JavaScript 发送的视图类型转换为它们的本机 UI 组件。ViewManager 知道如何创建影子节点、本地视图节点和更新视图。在 React-Native 框架中,有很多 ViewManager 可以使用原生组件。例如,如果有一天您想创建一个新的自定义视图并将其添加到 react-native,则该视图必须实现 ViewManager 接口
4. 用户界面管理器
UIManager 是拼图的最后一块,或者实际上是第一块。JavaScript JSX 声明式命令作为命令式命令发送到本机,告诉 React-Native 如何布局视图,逐步迭代。因此,作为第一次渲染,UIManager 将调度命令以创建必要的视图,并将随着应用程序的 UI 随时间的变化而继续发送更新差异。
所以 React-Native 基本上还是利用了 Reactjs 的能力来计算之前和当前的渲染表示之间的差异,并据此将事件分派给 UIManager
要更深入地了解该过程,我推荐Emil Sjölander在弗罗茨瓦夫举行的 React-Native EU 2017 会议上的以下演讲