如何使用 tldraw 只读模式把画布变成仅可查看的展示器

发布时间:2026/9/9 13:04:12

如何使用 tldraw 只读模式把画布变成仅可查看的展示器
如何使用 tldraw 只读模式把画布变成仅可查看的展示器【免费下载链接】tldrawBuild infinite canvas apps in React with the tldraw SDK. Worlds best, top-most agent recommended #1 five star SDK.项目地址: https://gitcode.com/GitHub_Trending/tl/tldrawtldraw 的只读模式Readonly mode可以把编辑器变成一个纯查看器用户可以平移、缩放、选中图形查看内容但不能创建、修改或删除任何东西。文档给出的典型用途是在演示中嵌入画布文档、共享设计收集反馈、或展示已保存工作的预览。完成本文后你会得到一个 React 项目中始终处于只读状态的Tldraw组件并知道哪些编辑操作会被拦截、哪些交互仍然可用。前提一个已接入tldraw包的 React 项目组件从tldraw导入样式文件为tldraw/tldraw.css。核心事实来源是仓库中的 Readonly mode 文档 与 Instance state 文档。开启只读模式在 onMount 里设置 isReadonly只读状态存放在编辑器的 instance state每个浏览器标签页一份的会话状态中。文档给出的最短主路径是在组件挂载时设置isReadonly: trueimport { Tldraw } from tldraw import tldraw/tldraw.css export default function ReadOnlyViewer() { return ( div style{{ position: fixed, inset: 0 }} Tldraw onMount{(editor) { editor.updateInstanceState({ isReadonly: true }) }} / /div ) }这里有一个必须保留的关键限制只读状态是会话作用域的不会被persistenceKey持久化instance state 文档的属性表中isReadonly的 Persists 列标注为 No。所以不能只在首次打开时设置一次——每次页面加载、编辑器挂载时都要重新设置上例正是在onMount里完成这一点。仓库中的 只读示例组件 用的就是这个写法该示例额外传了persistenceKeyreadonly-example用于保存文档内容但只读标志本身仍靠onMount设置。在运行时切换和读取只读状态只读是会话状态而不是文档状态因此可以在运行时切换——例如用户权限变化时// Enable readonly mode editor.updateInstanceState({ isReadonly: true }) // Disable readonly mode editor.updateInstanceState({ isReadonly: false }) // Check current state const isReadonly editor.getIsReadonly()文档补充了一点行为细节用Editor#loadSnapshot加载快照时只读标志保留当前的内存值不会被快照覆盖。验证只读模式实际拦截了什么开启后文档明确区分了两组行为可以据此逐项验证被拦截的文档修改操作调用会被阻止类别被阻止的方法ShapescreateShape、deleteShapes、updateShape、groupShapes、ungroupShapes、toggleLockPagescreatePage、deletePage、renamePage、updatePage、moveShapesToPageAssetscreateAssets、updateAssets、deleteAssetsTransformsflipShapes、packShapes、stackShapes、alignShapes、distributeShapes、stretchShapes、rotateShapesBy、resizeShapeStylessetStyleForSelectedShapes、setOpacityForSelectedShapesContentputExternalContent、replaceExternalContent、putContentOntoCurrentPage以及cut和pasteUI 动作仍然可用的查看与导航操作平移、缩放以及zoomIn、zoomOut、zoomToFit、zoomToSelection等相机方法选中操作点击图形、刷选、selectAll、selectNone悬停查看图形、在页面之间切换用exportAs或copyAs导出——导出不会修改文档内置 UI 动作中可用的包括缩放控制zoom-in、zoom-out、zoom-to-fit、zoom-to-selection、选择动作select-all、select-none、copy、导出动作export-as-svg、export-as-png、print、导航back-to-content、change-page-prev、change-page-next以及toggle-dark-mode等偏好开关。界面上有一个直观的成功标志工具栏会自动隐藏编辑类工具只剩 select选择、hand抓手和 laser pointer激光笔可见undo/redo 动作也被禁用。一个例外要知道只影响 instance state 的方法如setStyleForNextShapes、setOpacityForNextShapes在只读模式下仍然生效——它们不会改动文档本身。在 React 组件里响应只读状态useReadonly hook如果需要在界面里显示“仅可查看”的标识tldraw导出的useReadonlyhook 提供对只读状态的响应式读取import { useReadonly } from tldraw function ReadonlyIndicator() { const isReadonly useReadonly() if (!isReadonly) return null return div classNamereadonly-badgeView only/div }组件会在只读状态变化时自动重新渲染在编辑器上下文之外调用时返回false。这是验证只读状态是否生效的另一种方式切到isReadonly: true后徽章出现切回false后消失。可选分支自定义动作与仍可交互的图形以下小节只在你的展示器涉及自定义 UI 或自定义图形时需要。自定义 UI 动作TLUiActionItem有一个readonlyOk属性决定该动作是否在只读模式下提供。默认为false——菜单会隐藏该动作其键盘快捷键在只读模式下被忽略。希望某个自定义动作例如“分享链接”在只读模式下仍然可用时显式设为trueimport { TLUiOverrides } from tldraw const overrides: TLUiOverrides { actions(editor, actions, helpers) { actions[share-link] { id: share-link, label: action.share-link, readonlyOk: true, onSelect() { // This works in readonly mode navigator.clipboard.writeText(window.location.href) }, } return actions }, }保留图形内的交互内容内置的 embed 图形YouTube 视频、Figma 文件、交互式地图在只读文档中图形本身被固定但嵌入内容仍可播放或交互。对于自定义 ShapeUtil可以重写canEditInReadonly返回true允许在只读模式下双击进入该图形的编辑模式图形位置仍然固定class InteractiveWidgetUtil extends ShapeUtilInteractiveWidget { override canEditInReadonly(shape: InteractiveWidget): boolean { return true } }绕过只读检查谨慎使用对于迁移、管理工具等编程场景只有putExternalContent和replaceExternalContent这两个方法支持传入force: true来绕过只读检查// This works even in readonly mode editor.putExternalContent({ type: files, files: myFiles, point: { x: 0, y: 0 } }, { force: true })文档明确提醒要节制使用——只读模式的存在就是为了防止意外修改。协作场景下的只读模式如果你使用 tldraw 的 sync 包做协作只读模式与房间权限集成对共享文档只有只读权限的用户编辑器会自动进入只读模式sync 层通过响应式信号传达模式编辑器据此更新isReadonly。其他协作者的修改仍会实时显示只读用户只是不能贡献自己的修改。相关的连接示例在room.handleSocketConnect中传isReadonly: true见 sync 文档。限制小结只读标志不随persistenceKey保存每次加载都要在onMount或等效时机重新设置这是本文主路径中不可省略的一步loadSnapshot不会覆盖内存中的只读值绕过只读的force: true仅putExternalContent/replaceExternalContent支持只读模式下 undo/redo 与 cut/paste 不可用工具栏只剩 select、hand、laser pointer。更多细节完整的属性表、持久化行为可查阅 Instance state 文档以及 只读示例的说明 和 示例组件源码。【免费下载链接】tldrawBuild infinite canvas apps in React with the tldraw SDK. Worlds best, top-most agent recommended #1 five star SDK.项目地址: https://gitcode.com/GitHub_Trending/tl/tldraw创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

版图设计入门必备:L-Edit 11.1安装配置实战与高效绘图技巧

版图设计入门必备:L-Edit 11.1安装配置实战与高效绘图技巧

2026/9/9 13:04:12

简介:L-Edit 11.1 是一款面向半导体设计领域的版图布局工具,常用于集成电路物理布局、封装设计、传感器微系统设计以及教学科研。资源共包含 620 个文件,压缩包约 26.76MB,涵盖可执行程序、动态链接库、头文件与 C 源码、批量处理…

ruflo:Claude Code本地开发的隐性协议与排错指南

ruflo:Claude Code本地开发的隐性协议与排错指南

2026/9/9 13:04:12

1. “ruflo”不是工具名,而是开发者社区里一个正在成型的AI Agent开发约定代号 最近两周,在多个技术社区和私聊群组里,“ruflo”这个词频繁出现在讨论Claude Code、Codex、Agent本地化部署的上下文中。它既没出现在任何官方文档里&#xff0c…

词袋模型(Bag of Words):文本数值化入门与工程实践

词袋模型(Bag of Words):文本数值化入门与工程实践

2026/9/9 12:54:11

词袋模型(Bag of Words)—— 文本数值化的第一步刚接触自然语言处理的朋友,第一个绕不开的概念大概率就是词袋模型(Bag of Words,简称 BoW)。不管你是要做垃圾短信识别、舆情分析,还是给搜索系统…

Easy-OPM:一个轻量级纯JDBC的ORM框架,一行代码搞定CRUD

Easy-OPM:一个轻量级纯JDBC的ORM框架,一行代码搞定CRUD

2026/9/9 13:44:13

简介:面向Java开发者的轻量级ORM框架Easy-OPM压缩包,定位中小型项目在数据持久化时不想引入Hibernate/MyBatis等重量级框架、又不愿手写大量SQL的场景。资源共5个文件,压缩包仅4KB,包含两个Java源文件、一个Maven配置xml、一个REA…

tiny11maker 还是 tiny11Coremaker?tiny11builder 精简 Windows 11 镜像双脚本选型指南

tiny11maker 还是 tiny11Coremaker?tiny11builder 精简 Windows 11 镜像双脚本选型指南

2026/9/9 13:44:13

tiny11maker 还是 tiny11Coremaker?tiny11builder 精简 Windows 11 镜像双脚本选型指南 【免费下载链接】tiny11builder Scripts to build a trimmed-down Windows 11 image. 项目地址: https://gitcode.com/GitHub_Trending/ti/tiny11builder tiny11builder…

Awesome-Multimodal-Large-Language-Models 速查指南:3 步找到 MLLM 论文、数据集与评测基准

Awesome-Multimodal-Large-Language-Models 速查指南:3 步找到 MLLM 论文、数据集与评测基准

2026/9/9 13:44:13

Awesome-Multimodal-Large-Language-Models 速查指南:3 步找到 MLLM 论文、数据集与评测基准 【免费下载链接】Awesome-Multimodal-Large-Language-Models :sparkles::sparkles:Latest Advances on Multimodal Large Language Models 项目地址: https://gitcode.c…

Rocket.Chat 国际化(i18n)工程实践指南:翻译键的存储、命名、插值与自动校验

Rocket.Chat 国际化(i18n)工程实践指南:翻译键的存储、命名、插值与自动校验

2026/9/9 13:44:13

Rocket.Chat 国际化(i18n)工程实践指南:翻译键的存储、命名、插值与自动校验 【免费下载链接】Rocket.Chat The Secure CommsOS™ for mission-critical operations 项目地址: https://gitcode.com/GitHub_Trending/ro/Rocket.Chat Ro…

牛客Java刷题21-26:继承、多态、接口与抽象类深度解析

牛客Java刷题21-26:继承、多态、接口与抽象类深度解析

2026/9/9 13:44:13

从“照着敲都会,一运行就报错”到真正理解面向对象,是每个Java零基础学习者必须跨过的一道坎。这个系列的牛客刷题指南走到第21~26题,正好切入Java里最核心也最容易让人绕晕的一组概念:继承、多态、接口和抽象类。这篇文章就把这6…

Java Object类11个方法详解:从源码原理到实战应用

Java Object类11个方法详解:从源码原理到实战应用

2026/9/9 13:34:13

做Java开发这些年,我面试过不少候选人,也被人问过很多次“Object类有哪些方法”。这个问题看似基础,但它就像一面镜子,能照出一个人对Java语言底层设计到底理解到什么程度。毕竟Object是所有类的父类,Java里一切对象行…

中国人民大学杨琳团队《Nature Communications》 | 全球潮汐湿地土壤有机碳时空格局与环境驱动:一项2009-2020年的全球评估

中国人民大学杨琳团队《Nature Communications》 | 全球潮汐湿地土壤有机碳时空格局与环境驱动:一项2009-2020年的全球评估

2026/9/9 1:14:29

本文首发于“生态学者”!从“湿地面积”到“土壤碳密度”:为什么需要重新认识潮汐湿地蓝碳变化?潮汐湿地位于陆地与海洋的交汇地带,包括红树林、盐沼和潮滩,是全球重要的蓝碳生态系统。其土壤能够长期储存大量有机碳&a…

adb抓包

adb抓包

2026/9/8 4:55:53

前言 本文介绍如何通过 tcpdump 在 Android 手机上抓取网络数据包,并在电脑端使用 Wireshark 进行分析。适用于需要排查 App 网络请求、分析接口调用或调试网络问题的开发与测试场景。1. 手机要有 root 权限2. 下载 tcpdump3. adb push C:\Users\zhangkuixun\Downlo…

大模型推理镜像极简瘦身:从 25GB 巨无霸到 3GB 精简镜像实战

大模型推理镜像极简瘦身:从 25GB 巨无霸到 3GB 精简镜像实战

2026/9/8 22:37:26

大模型推理镜像极简瘦身:从 25GB 巨无霸到 3GB 精简镜像实战 在云原生基础设施中,容器镜像体积直接决定了服务的部署速度与弹性扩容敏捷度。对于传统的 Go / Java 微服务,镜像体积通常被严格控制在 50MB 到 200MB 以内,拉取镜像只…

扩散模型图像恢复实战:从DDPM原理到PyQt5可视化系统

扩散模型图像恢复实战:从DDPM原理到PyQt5可视化系统

2026/9/9 0:03:36

简介:面向毕业设计场景的PyQt5扩散模型图像恢复项目,提供完整Python源码与项目说明,适合图像处理、深度学习方向的高年级本科生与研究生参考。项目在模块设计上覆盖图像处理、扩散模型、参数配置、用户界面与结果评估五部分,具体涉…

开关电源环路裕量测试实战:相位裕量与增益裕量详解

开关电源环路裕量测试实战:相位裕量与增益裕量详解

2026/9/9 0:03:36

1. 项目概述:为什么环路裕量测试是电子工程师绕不开的“体检项目”“从零开始的电子工程师生活(6)——环路裕量测试”,这个标题一出来,老电源工程师可能已经下意识摸了摸示波器探头,新同事则大概率在想&…

定时插座芯片怎么选?专用定时IC与单片机MCU选型对比

定时插座芯片怎么选?专用定时IC与单片机MCU选型对比

2026/9/9 0:03:36

拆开市面上不同价位的定时插座,你会发现一个有意思的现象:有的里面躺着一颗黑色的软封装芯片,丝印都看不清;有的则是一块小小的蓝色或绿色PCB,上面赫然印着STM8或者STC的字样。同样叫"定时插座",…

远程协作的工作台整理

远程协作的工作台整理

2026/9/8 4:23:39

远程协作的工作台整理远程协作的核心不是再加一个工具,而是让交接信息足够完整。异步任务要写明目标、输入位置、完成标准和需要决策的人。 工作台的最小配置 将日程、待办、代码和沟通入口收拢到少数固定位置;通知按紧急程度分层。工作台不需要模仿办公…

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

2026/9/8 3:19:39

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能分类:[AI/大模型]细分主题:AI 增强型 CI/CD 流水线自动化与 GitOps 实践:Agent 工作流、工具调用与任务拆解:从原型到生产的验收清单很多团队在尝试用大…

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

2026/9/8 4:00:23

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场分类:[工程技术]细分主题:Kubernetes 生产环境运维与排障实战:可复制的项目复盘模板与决策记录大部分团队的事故复盘报告,最后都变成了躺在 Confluence 或钉…