资讯详情

资讯详情

@tanstack/preact-query-devtools 开发工具包深度解析:安装、浮窗/内嵌模式与源码实现

tanstack/preact-query-devtools 开发工具包深度解析安装、浮窗/内嵌模式与源码实现【免费下载链接】query Powerful asynchronous state management, server-state utilities and data fetching for the web. TS/JS, React Query, Solid Query, Svelte Query and Vue Query.项目地址: https://gitcode.com/GitHub_Trending/qu/query本篇文章围绕 TanStack Query 仓库中 tanstack/preact-query-devtools 包展开系统讲解它在 Preact Query 应用中的定位、安装方式、两种挂载模式Floating Mode 与 Embedded Mode及全部可配置项并透过该包自身的 CHANGELOG.md 与源码实现说明其「薄封装 共享核心」的架构设计。读完本文你将掌握在 Preact 项目中接入、定制和裁剪 Query Devtools 的完整实战方案并能理解为何它的绝大多数版本发布只涉及依赖升级。包定位Preact Query 的专用调试面板tanstack/preact-query-devtools是 TanStack Query 生态中面向 Preact 框架的开发者工具包其 package.json 中的描述为 Developer tools to interact with and visualize the TanStack/preact-query cache即用于可视化和交互操作 Preact Query 查询缓存。从源码结构看它是一个典型的框架适配层真正的 UI 与缓存可视化逻辑集中在共享包tanstack/query-devtools中而本包负责把 Preact 的组件生命周期、Hooks 与共享核心对接。例如 PreactQueryDevtools.tsx 中import { onlineManager, useQueryClient } from tanstack/preact-query import { TanstackQueryDevtools } from tanstack/query-devtools组件内部通过useState惰性创建一个TanstackQueryDevtools实例并在useEffect中把该实例mount到一个普通的div ref容器上见 PreactQueryDevtools.tsx。因此该包的体积很小且绝大多数版本迭代都只是「跟随上游版本号」——这一点正是 CHANGELOG.md 中大量 Updated dependencies 条目的由来。从 CHANGELOG 看包的版本演进引入与当前版本根据 CHANGELOG.md该包在5.92.0版本通过 PR #10119 以 feat: Add preact query devtools 正式加入仓库随后与tanstack/preact-query、tanstack/query-devtools保持同版本号发布当前仓库内最新版本为5.102.8可对照 package.json 中的version: 5.102.8。Updated dependencies 模式说明阅读 CHANGELOG 会发现绝大多数条目如 5.102.8、5.102.6、5.102.1 等只包含### Patch Changes - Updated dependencies []: - tanstack/preact-query5.102.6 - tanstack/query-devtools5.102.6这并非空更新而是版本同步机制的直接体现因为本包自身代码未变但它的两个依赖Preact Query 适配层与共享 Devtools 核心发布了新版本因此以 Patch 形式同步版本号确保依赖关系严格一致。作为薄封装包这种发布模式是正常且健康的。几个实质性的代码变更除了依赖同步CHANGELOG 还记录了本包自身的几次真实改动版本类型变更内容5.92.0Minorfeat: Add preact query devtools包首次引入PR #101195.94.4Patchchore: fixed version修复版本固定问题PR #100645.94.5Patchfix: resolve issue about excluded build directory构建产物目录排除问题PR #103125.100.7Patchdocs: 对齐 logo、panel 与buttonPosition的 union 描述文档与 JSDocPR #106175.100.8Patchrefactor: 将已废弃的JSX.CSSProperties替换为 Preact 命名空间下的CSSPropertiesPR #10622其中 5.100.8 的重构可以在 PreactQueryDevtoolsPanel.tsx 中看到对应结果import type { CSSProperties, VNode } from preact组件签名使用props: DevtoolsPanelOptions的接口形式定义样式类型兼容现代 Preact 类型系统。安装与导入Devtools 是独立包需要单独安装。在项目目录下执行以下任一命令与 devtools.md 一致npm i tanstack/preact-query-devtools # 或 pnpm add tanstack/preact-query-devtools # 或 yarn add tanstack/preact-query-devtools # 或 bun add tanstack/preact-query-devtools安装后从主入口导入import { PreactQueryDevtools } from tanstack/preact-query-devtools根据 package.json包同时提供了./production子路径导出用于在生产构建中强制引入完整实现默认主入口在生产环境会退化为空组件详见下文「开发/生产行为差异」。开发/生产行为差异自动裁剪机制这是理解本包零成本接入的关键。查看 index.tsexport const PreactQueryDevtools: (typeof Devtools)[PreactQueryDevtools] process.env.NODE_ENV ! development ? function () { return null } : Devtools.PreactQueryDevtools也就是说默认导入路径在非 development 环境下会渲染为nullDevtools 代码不会进入你的生产包。官方文档明确指出By default, Preact Query Devtools are only included in bundles whenprocess.env.NODE_ENV development因此你无需在构建配置中手动排除它们。如果你出于特殊原因需要在生产环境也使用 Devtools例如内部管理后台可以改用 production.ts 提供的强制实现它不做任何环境判断始终导出完整组件。该行为同样有测试覆盖见 PreactQueryDevtools.test.tsx 中 should return null in non-development environments 用例。浮窗模式Floating Mode浮窗模式会把 Devtools 挂载为应用中的固定浮动元素并在屏幕角落提供一个 TanStack 标志按钮用于开关面板开关状态会持久化到localStorage刷新后依然保留。建议把组件放在尽可能靠近应用根节点的位置。经典用法来自 devtools.mdimport { PreactQueryDevtools } from tanstack/preact-query-devtools function App() { return ( QueryClientProvider client{queryClient} {/* 应用其余部分 */} PreactQueryDevtools initialIsOpen{false} / /QueryClientProvider ) }Floating Mode 可配置项以下选项定义于 PreactQueryDevtools.tsx 的DevtoolsOptions接口说明来自 devtools.md选项类型默认值说明initialIsOpenbooleanfalse设为true时 Devtools 默认展开buttonPositiontop-left \| top-right \| bottom-left \| bottom-right \| relativebottom-rightTanStack 开关按钮的位置positiontop \| bottom \| left \| rightbottomDevtools 面板展开的位置clientQueryClient最近上下文自定义 QueryClient否则使用最近QueryClientProvider提供的那一个errorTypes{ name: string; initializer: (query: Query) TError }[][]预定义可在面板中触发的错误从 UI 切换触发时initializer会以对应 query 为参数被调用必须返回一个 ErrorstyleNoncestring无传入 style 标签的 nonce配合 CSP内容安全策略允许内联样式shadowDOMTargetShadowRoot无传入 Shadow DOM 目标样式将应用在 shadow DOM 内而非 light DOM 的 head 标签中hideDisabledQueriesbooleanfalse在面板中隐藏被禁用的查询themelight \| dark \| systemsystem面板主题内嵌模式Embedded Mode内嵌模式把 Devtools 面板作为普通元素渲染进你的页面适合把它嵌入到你自己开发的调试工具或管理界面中。你需要自行管理开合状态并使用PreactQueryDevtoolsPanel组件示例来自 devtools.mdimport { useState } from preact/hooks import { PreactQueryDevtoolsPanel } from tanstack/preact-query-devtools function App() { const [isOpen, setIsOpen] useState(false) return ( QueryClientProvider client{queryClient} {/* 应用其余部分 */} button onClick{() setIsOpen(!isOpen)} {${isOpen ? Close : Open} the devtools panel}/button {isOpen PreactQueryDevtoolsPanel onClose{() setIsOpen(false)} /} /QueryClientProvider ) }Embedded Mode 可配置项对应接口DevtoolsPanelOptions定义于 PreactQueryDevtoolsPanel.tsx选项类型默认值说明styleCSSProperties{ height: 500px }面板容器自定义样式例如{ height: 100% }或{ height: 100%, width: 100% }onClose() void无面板关闭时调用的回调clientQueryClient最近上下文自定义 QueryClienterrorTypes{ name: string; initializer: (query: Query) TError }[][]预定义可触发的错误类型styleNoncestring无CSP nonce作用于注入 head 的 style 标签shadowDOMTargetShadowRoot无将样式应用到 shadow DOMhideDisabledQueriesbooleanfalse隐藏禁用查询themelight \| dark \| systemsystem面板主题注意实现细节面板容器默认高度为500px并通过style{{ height: 500px, ...props.style }}与传入样式合并见 PreactQueryDevtoolsPanel.tsx因此传style时无需重复指定高度。此外Panel 在构造核心实例时固定使用buttonPosition: bottom-left、position: bottom、initialIsOpen: true见同文件第 66-68 行这些是内嵌模式下的内部固定值。源码实现原理属性如何传递到底层tanstack/preact-query-devtools的核心价值在于把 Preact 的响应式属性变化同步到共享的TanstackQueryDevtools实例。以 PreactQueryDevtools.tsx 为例useState惰性构造核心实例useEffect负责把最新QueryClient同步进去devtools.setClient(queryClient)每个可配置项都有独立的useEffect调用对应的 settersetButtonPosition、setPosition、setInitialIsOpen、setErrorTypes、setTheme因此属性变化后无需重建实例即可热更新挂载与卸载分别调用devtools.mount(ref.current)与devtools.unmount()与 Preact 组件生命周期严格对应。这些行为全部有单元测试佐证。见 PreactQueryDevtools.test.tsx未提供 QueryClient 时抛出No QueryClient set, use QueryClientProvider to set one第 39-43 行通过 context 或 props 提供 client 均可正常挂载第 45-61 行各 props 的初始值传递与 rerender 后的动态更新均被逐一断言如第 63-69 行验证buttonPosition透传第 152-166 行验证挂载后变更buttonPosition会调用setButtonPositionstyleNonce、shadowDOMTarget、hideDisabledQueries通过构造参数透传第 117-150 行。对应的 PreactQueryDevtoolsPanel.test.tsx 则覆盖了 Panel 的挂载、onClose回调与style合并等行为。集成到 Preact 应用的最佳实践放在根组件附近无论浮窗还是内嵌模式官方都建议 Place the following code as high in your Preact app as you can越靠近页面根部上下文解析越可靠。依赖QueryClientProvider组件内部通过useQueryClient(props.client)解析 client未包裹 Provider 且未传client时会直接抛错测试已覆盖。如果使用独立于上下文的 client显式传入clientprop 即可。生产环境零成本默认入口在非 development 下渲染为null无需构建期手动剔除仅当你确实需要生产环境面板时才应改用tanstack/preact-query-devtools/production导出。遵守 CSP 与 Shadow DOM 场景页面启用严格 CSP 时给styleNonce传 nonce在 Web Component 或需要样式隔离的宿主中使用shadowDOMTarget。关注版本同步由于包与tanstack/preact-query、tanstack/query-devtools严格同版本发布见 CHANGELOG.md升级时建议三者保持同一版本避免适配层与核心版本错位。小结tanstack/preact-query-devtools是 Preact Query 调试体验的入口对外提供浮窗与内嵌两种模式、约十个可配置项对内则是连接 Preact 组件生命周期与共享tanstack/query-devtools核心的薄适配层。它的 CHANGELOG.md 如实记录了这一演进——从 5.92.0 引入、5.94.x 修复构建目录与版本问题到 5.100.x 对齐文档与类型现代化再到 5.102.8 与生态同步——阅读版本历史与源码能帮你更自信地在生产项目中接入并定制这套调试工具。【免费下载链接】query Powerful asynchronous state management, server-state utilities and data fetching for the web. TS/JS, React Query, Solid Query, Svelte Query and Vue Query.项目地址: https://gitcode.com/GitHub_Trending/qu/query创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
觉得有用,分享给同行:

为您的企业打造数字门面

稳重轻奢商务风格,端正雅致视觉,长效耐看不易过时。

立即咨询 →