@deckgl-fiber-renderer/reconciler

中文文档
2.0.1发布于 2026/05/26MITTypeScriptES Module近 30 天下载 3.6万

Internal package. Most users want @deckgl-fiber-renderer/dom instead.

原始使用文档
文档目录12 节
  1. Installation
  2. Architecture
  3. What is a React Reconciler?
  4. Persistence Mode
  5. Tree Flattening
  6. ID-Based Diffing
  7. Reference
  8. Exported APIs
  9. Development Mode Features
  10. Validation System
  11. Related Packages
  12. Further Reading

@deckgl-fiber-renderer/reconciler

Internal package. Most users want @deckgl-fiber-renderer/dom instead.

React reconciler implementation for deck.gl. Powers the JSX-to-deck.gl bridge but is rarely used directly.

Installation

pnpm add @deckgl-fiber-renderer/reconciler

Automatically installed as a dependency of @deckgl-fiber-renderer/dom. Only install directly if building custom renderers or contributing.


Architecture

What is a React Reconciler?

React's reconciler diffs element trees and determines what changed. The react-reconciler package lets you build custom renderers for non-DOM targets.

React JSX → Reconciler → Flattened layers/views → Deck instance

Persistence Mode

This reconciler uses persistence mode (creates new objects) instead of mutation mode (updates in place).

Rationale: deck.gl layers are immutable descriptors designed to be replaced:

"Layers are descriptor objects that are very cheap to instantiate. Create a new set of layers every render cycle." - deck.gl docs

deck.gl diffs layers internally by matching IDs and comparing props. The reconciler creates new layer instances; deck.gl's algorithm handles efficient updates.

Tree Flattening

deck.gl expects flat arrays, but React trees are nested. The reconciler flattens automatically:

Input (JSX):

<Deckgl>
  <view view={mainView}>
    <layer layer={layer1} />
    <layer layer={layer2} />
  </view>
</Deckgl>

Output (flattened):

{
  layers: [layer1, layer2],
  views: [mainView]
}

Layers can nest arbitrarily deep in React components. The reconciler collects them recursively.

ID-Based Diffing

deck.gl matches layers by ID for efficient updates:

  1. Match layers by ID
  2. Diff props for matching IDs
  3. Update only changed props

Without IDs: deck.gl generates random IDs. Each render looks like a new layer, triggering expensive re-initialization.

This is why the reconciler validates IDs in development mode.

Learn more: https://deck.gl/docs/developer-guide/using-layers#layer-identity-and-diffing


Reference

Exported APIs

createRoot(container)

Creates a reconciler root for a container element.

import { createRoot } from "@deckgl-fiber-renderer/reconciler";

const root = createRoot(canvasElement);
root.configure({ initialViewState: { ... } });
root.render(<layer layer={...} />);

Parameters:

  • container - DOM element (canvas or div) to render into

Returns: ReconcilerRoot

unmountAtNode(container)

Unmounts and cleans up a reconciler root.

import { unmountAtNode } from "@deckgl-fiber-renderer/reconciler";

unmountAtNode(canvasElement);

Parameters:

  • container - DOM element to unmount from

Cleanup: Unmounts React tree, destroys deck.gl instance, releases GPU resources, removes from roots registry.

roots

Map of active reconciler roots.

import { roots } from "@deckgl-fiber-renderer/reconciler";

if (roots.has(canvasElement)) {
  const existingRoot = roots.get(canvasElement);
  // Work with existing root
}

Type: Map<RootElement, ReconcilerRoot>

Usage: Ensures root idempotency. Check before creating new roots to avoid duplicates.

extend(objects) (deprecated)

Registers layer/view constructors for v1 syntax.

import { extend } from "@deckgl-fiber-renderer/reconciler";

extend({ MyCustomLayer });

Deprecated: Will be removed in v3. Use <layer layer={new MyCustomLayer(...)} /> instead of registering.

ReconcilerRoot

Type for reconciler root instances.

type ReconcilerRoot = {
  configure(props: DeckglProps): void;
  render(element: ReactNode): void;
  unmount(): void;
};

Development Mode Features

Validation System

The reconciler validates layers in development mode (process.env.NODE_ENV === "development"). Checks are stripped from production builds via dead code elimination.

Missing ID Warning

Triggered when a layer lacks an explicit id prop:

⚠️ Layer missing explicit "id" prop. This causes expensive reinitialization on every render.

Detection: Checks for missing or default IDs ("unknown").

Fix: Add explicit id to layer constructor.

Duplicate ID Error

Triggered when multiple layers share the same ID:

❌ Duplicate layer IDs detected: points, lines

Detection: Tracks all layer IDs in current render.

Impact: Duplicate IDs break deck.gl's diffing. Props from one layer may apply to another.

Fix: Ensure each layer has a unique id.

Production Behavior

All validation wrapped in if (process.env.NODE_ENV === 'development') checks. Bundlers eliminate this code in production builds. Zero runtime overhead in production.


Further Reading

版本与发布记录

@deckgl-fiber-renderer/reconciler 共发布 8 个版本,首次发布于 2025/03/14;过去 12 个月发布了 2 个版本。

版本发布日期距今
2.0.1latest2026/05/265 个月前
2.0.02026/04/226 个月前
1.4.02025/05/091.5 年前
1.3.02025/03/191.6 年前
1.2.02025/03/181.7 年前
1.1.12025/03/181.7 年前

关于 @deckgl-fiber-renderer/reconciler 的常见问题

@deckgl-fiber-renderer/reconciler 是什么?

Internal package. Most users want @deckgl-fiber-renderer/dom instead.

如何安装 @deckgl-fiber-renderer/reconciler?

在项目目录运行 npm install @deckgl-fiber-renderer/reconciler,或使用 pnpm add / yarn add / bun add。它还需要宿主项目提供 peer 依赖:@deck.gl/core(>=9.1)、@deck.gl/geo-layers(>=9.1)、@deck.gl/layers(>=9.1)、@deck.gl/mapbox(>=9.1)、@deck.gl/mesh-layers(>=9.1)、react(^19)、react-dom(^19)。npm 7 及以上与 pnpm 8 及以上默认会自动安装必需的 peer 依赖,Yarn 需要手动安装。

@deckgl-fiber-renderer/reconciler 支持 TypeScript 吗?

支持。包内自带 TypeScript 类型声明(package.json 声明了 types 入口),安装后即可获得类型提示,无需再安装 @types 包。

@deckgl-fiber-renderer/reconciler 支持 ESM 还是 CommonJS?

以 ES Module 形式发布,推荐使用 import 引入。在 CommonJS 项目中,Node.js 20.19+ / 22.12+ 可以直接 require() 不含顶层 await 的 ES Module,更早的版本需要改用动态 import()。

@deckgl-fiber-renderer/reconciler 可以商用吗?

@deckgl-fiber-renderer/reconciler 使用 MIT 许可。宽松许可:允许商业使用、修改和再分发,通常只需在分发时保留原版权与许可声明。以上为概括,不构成法律意见,请以许可原文为准。

@deckgl-fiber-renderer/reconciler 的下载量有多少?

根据 npm 官方下载统计,@deckgl-fiber-renderer/reconciler 在 2026/10/12 – 2026/11/10 这 30 天内被下载 36,006 次,日均约 1,200 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入,适合横向比较热度,不能直接等同于使用人数。

@deckgl-fiber-renderer/reconciler 还在维护吗?

最新版本 2.0.1 发布于 2026/05/26(5 个月前);至今共发布 8 个版本,其中过去 12 个月发布了 2 个;首次发布于 2025/03/14。发布频率只是参考信号:功能稳定的工具可能很少需要更新,建议结合源码仓库的 issue 和提交记录判断。