序幕
我们都熟悉 React 自带的默认渲染器——ReactDOM。
我们还有自定义的 React 渲染器,可用于与非DOM 环境的“主机”交互,例如移动设备(著名的 React Native)、VR 设备、终端(如ink)等。
但是,在浏览器主机中,有一些自定义渲染器在 ReactDOM 内(或代替)操作。
核心问题
在浏览器主机中运行的自定义渲染器的目的是什么?
例子
在浏览器主机中运行的自定义渲染器的一些值得注意的示例是:
以下来自react-three-fiber
threejs 元素的片段在 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 实例执行操作的。
可能性/假设
那么为什么要选择自定义渲染器呢?我相信它可能是以下零个、一个或多个:
- 通过绕过生命周期/副作用可以获得一些性能提升?
- 对排序和安装/卸载进行更严格的控制?
- 代码的简单性,在设置自定义渲染器的初始障碍之后,其余的映射变得更容易了吗?