是否所有的react-native组件都可以直接渲染为原生UI组件呢?

React Native 使你可以创建真正原生的应用,用户体验绝不拉胯。它提供了一些平台无关的抽象核心组件,像是View, Text 以及 Image等,可直接映射渲染为 对应平台的原生UI组件。

请问下,
1、是否所有的组件都可以直接渲染为原生UI组件呢?
2、请问下:如果不是所有组件,那么可以直接渲染为原生UI组件的RN组件是哪些呢?
3、它渲染为原生UI组件的原理是什么样的呢?

阅读 981
avatarAI BotBETA

回答

1、不是所有的react-native组件都可以直接渲染为原生UI组件

React Native提供了一套封装好的原生UI组件,如View、Text、Image等,这些组件可以直接映射渲染为对应平台的原生UI组件。但是,React Native也支持开发者创建自定义组件,这些自定义组件可能包含逻辑而不仅仅是UI表现,因此不一定能直接渲染为原生UI组件。此外,一些高级组件或第三方库组件可能内部实现了复杂的逻辑或依赖于特定的平台特性,也可能无法直接渲染为原生UI组件。

2、可以直接渲染为原生UI组件的RN组件主要包括React Native核心库提供的组件,如:

  • View:用于布局和容器。
  • Text:用于显示文本。
  • Image:用于显示图片。
  • ScrollView:用于可滚动的视图容器。
  • Touchable系列组件(如TouchableHighlight、TouchableOpacity等):用于响应用户触摸。

这些组件都是React Native为了简化跨平台开发而提供的抽象核心组件,它们可以直接映射到iOS和Android平台的原生UI组件上。

3、React Native渲染为原生UI组件的原理主要基于JavaScript线程与原生线程的交互以及React的虚拟DOM(VDOM)机制

  • JavaScript线程与原生线程的交互:React Native在JavaScript线程中运行JavaScript代码,然后通过一个叫做桥接(Bridge)的机制与原生线程进行通信。JavaScript线程计算出需要进行的UI更新,然后将这些更新序列化后通过Bridge发送给原生线程,由原生线程来实际执行UI的绘制和更新。
  • React的虚拟DOM(VDOM):React Native利用React的VDOM机制来优化UI的更新。当JavaScript线程计算出UI更新时,它实际上是在创建一个新的VDOM,然后将新旧VDOM进行对比,找出需要更新的部分,然后只将这些部分发送给原生线程进行更新。这样可以极大地减少需要通过Bridge传输的数据量,提高性能。

综上所述,React Native通过JavaScript线程和原生线程的交互以及React的VDOM机制,实现了在JavaScript中编写UI代码然后在原生环境中渲染UI的能力。但是,并不是所有的React Native组件都可以直接渲染为原生UI组件,这取决于组件的类型和内部实现。

2 个回答

类比 浏览器环境,你写的所有的显示组件最后都是由浏览器渲染成 html 组件
在 RN 中,你写的所有组件最后也是由原生宿主环境去渲染展示成原生组件,

原理就是 RN 将常用的组件,比如 ,View, Text,Image 按照渲染协议给你封装好了,你直接用就可以,如果你想自己封装一些原生组件,就要按照 RN 提供的协议去封装就可以了。

  1. 理论上是的,你操作的东西都是原生组件,除非你主动用 webview 包一些东西
  2. 没记错的话,有一些 SVG 和基于 SVG / Canvas 开发的图表是封装 Webview 来实现的,比如 EChart 相关。因为这样开发效率比较高。几乎所有的 RN 原生组件都是桥接系统 UI 组件。
  3. 原理大概是内嵌一个 Hermes JS 引擎负责执行 JS,和控制原生 UI 的组件建立联系,于是你所有通过 JS 写的逻辑都会传递到原生控制器;相应的,用户的操作也会返回给你的 JS 负责处理。这个过程有一些损耗,所以你会看到一些更“原生”的库,比如 reanimate。
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏