科学工具
科学工具让世界更美好
让世界更美好

Tldraw:基于 React 的开源无限画板工具库Tldraw:基于 React 的开源无限画板工具库

Tldraw 是面向 React 的开源无限画布开发库,支持在网页中构建具备绘图、文本输入、媒体嵌入等功能的交互式白板应用。

packages:存放核心功能包,如绘图引擎、工具集等

apps:示例应用模块,包含多个演示项目

templates:项目模板,用于快速初始化开发环境

开发环境搭

1、克隆代码仓库: git clone https://github.com/tldraw/tldraw.git 2、安装依赖: 先通过 npm i -g corepack 启用 Yarn 核心包管理,然后执行 yarn 安装所有依赖 3、启动本地开发服务器: 运行 yarn dev 后,访问 http://localhost:5420 查看示例应用

tldraw从基础集成到功能扩展

基础集成

通过 NPM 安装核心包: npm install tldraw

在 React 组件中引入并渲染画布:

import { Tldraw } from 'tldraw';
import 'tldraw/tldraw.css';

export default function App() {
  return (
    <div style={{ position: 'fixed', inset: 0 }}>
      <Tldraw />
    </div>
  );
}

此时会呈现一个基础画布,支持画笔绘制、文本输入、缩放平移、撤销重做等功能。

数据持久化

通过 persistenceKey 属性开启本地存储:

<Tldraw persistenceKey="your-project-key" />

该配置会使用浏览器本地存储,实现画布内容在刷新页面或跨标签页时的同步。

实时协作功能 1、安装协作库: npm install @tldraw/sync 2、使用协作钩子创建共享存储:

import { useSyncDemo } from '@tldraw/sync';

const store = useSyncDemo({ roomId: 'unique-room-id' });
<Tldraw store={store} />

不同设备或窗口访问相同 roomId 时,可实现实时 cursor 同步、用户状态显示、视角跟随等协作功能。

通过 API 控制画布

利用 onMount 回调获取编辑器实例,实现程序化操作:

const handleMount = (editor) => {
  // 创建文本形状
  editor.createShape({
    type: 'text',
    x: 200,
    y: 200,
    props: { richText: toRichText('Hello world!') }
  });
  // 全选并平滑缩放至选中内容
  editor.selectAll();
  editor.zoomToSelection({ animation: { duration: 5000 } });
};

<Tldraw onMount={handleMount} />

Editor 实例提供丰富 API,可控制形状创建、选择、变换、布局等操作,更多内容参考官方 API 文档 https://tldraw.dev/docs/api/editor

项目结构

目录/文件 功能描述
.github GitHub 工作流配置(如 CI/CD)
.husky Git 钩子脚本,用于代码校验
assets 国际化文本、图标等静态资源
internal 内部工具包,非公开 API
CHANGELOG.md 版本变更记录
LICENSE.md 授权协议(需保留「Powered by tldraw」水印)
package.json 项目依赖与脚本配置

定制化开发

1、自定义形状:通过继承 Shape 类实现自定义图形渲染逻辑

2、工具扩展:开发自定义工具,如流程图工具、原型设计工具等

3、界面定制:覆盖 CSS 样式或替换 UI 组件,适配品牌视觉风格

4、数据同步:集成自有后端实现数据持久化,替代默认的本地存储或协作方案