【发布时间】:2020-12-30 19:54:28
【问题描述】:
前奏
我们都熟悉 React 自带的默认渲染器——ReactDOM。
我们还有自定义的 React 渲染器,可用于与 不是 DOM 环境的"hosts" 交互,例如移动设备(著名的 React Native)、VR 设备、终端(比如ink),等等。
但是,在浏览器主机中,有一些自定义渲染器在 ReactDOM 内(或代替)运行。
核心问题
在浏览器主机中运行的自定义渲染器的目的是什么?
示例
在浏览器主机中运行的自定义渲染器的一些值得注意的例子是:
react-three-fiberthreejs 元素中的以下 sn-p 元素在 React 中声明,并且在后台它将“映射”到特定的画布操作:
<Canvas>
<ambientLight />
<pointLight position={[10, 10, 10]} />
<Box position={[-1.2, 0, 0]} />
<Box position={[1.2, 0, 0]} />
</Canvas>
react-three-fiber 正在使用自定义渲染器来实现上述目的,但我认为它也可以通过副作用来实现。 Box 可以有一个useEffect,它对threejs 实例执行操作。
可能性/假设
那么为什么选择自定义渲染器? 我相信它可能是以下零个、一个或多个:
- 绕过生命周期/副作用会带来一些性能提升吗?
- 对排序和安装/卸载进行更严格的控制?
- 代码的简单性,在设置自定义渲染器的初始障碍之后,其余的映射变得更容易了吗?
【问题讨论】:
-
这可以回答它:twitter.com/0xca0a/status/1282999626782650368 但是当你意识到 react 与 dom 没有任何关系时,它会有更多的深度。它甚至不依赖它。 react 是一个跨平台的组件标准。所以 react-dom 将 react 翻译成 dom 与将 react 翻译成 konva、three、android、ios、windows、linux、gtk、shell 等一样有意义。
-
太棒了 - 谢谢@hpalu(这些是我正在寻找的讨论和思考过程)。它是一个非常好的首发
标签: reactjs react-fiber