ARTICLE DETAIL

资讯详情

深耕网站建设、视觉设计与SEO优化的一线实战洞察。

在应用中嵌入 Cube Playground 的 QueryBuilder React 组件:接入指南与源码剖析

在应用中嵌入 Cube Playground 的 QueryBuilder React 组件:接入指南与源码剖析 在应用中嵌入 Cube Playground 的 QueryBuilder React 组件接入指南与源码剖析【免费下载链接】cube Cube Core is open-source semantic layer for AI, BI and embedded analytics项目地址: https://gitcode.com/gh_mirrors/cu/cube导读Cube Playground 是 CubeCube Core开发服务器环境自带的图形化 UI用于可视化建模、查询探索与前端集成引导。而cubejs-client/playground这个 npm 包将 Playground 中最核心的QueryBuilder查询构建器以独立 React 组件的形式开放出来允许你把它直接嵌入自己的前端应用让业务用户在不接触代码的情况下拖拽生成多维分析查询。本文以 packages/cubejs-playground/README.md 为主体结合仓库源码完整讲解组件安装、参数配置、图表渲染器资源部署等实战步骤并深入剖析其内部实现原理帮助你在自己的应用中快速落地一个可复用的 Cube 查询构建器。Cube Playground 是什么从仓库源码看Playground 是 Cube 开发服务器环境Cube development server的配套 UI其应用入口 src/index.tsx 使用react-router-dom注册了多条路由/首页IndexPage/buildExplore 页面ExplorePage外层由SecurityContextProvider包裹负责 token 相关处理/schema数据模型 Schema 页面SchemaPage/connection数据源连接向导ConnectionWizardPage/cube-bi与/frontend-integrationsBI 能力与前端集成引导页这些页面共同构成了开发者从「连接数据源 → 定义数据模型 → 构建查询 → 集成前端」的完整工作流。而对外发布的 React 组件包则把其中「构建查询」这一环节单独抽离供任何 React 应用复用。安装cubejs-client/playground根据 package.json该包的名称是cubejs-client/playground当前仓库版本为1.7.42模块入口为lib/playground/index.js类型声明为lib/playground/index.d.ts发布时包含public、build、lib三个目录。npm install cubejs-client/playground # 或 yarn add cubejs-client/playground从 src/playground/index.ts 可以看出包的公开 API 主要包括QueryBuilder可嵌入的查询构建器组件一系列 hooks来自../hooksfetchPoll轮询请求工具函数setTracker/setTelemetry用于配置埋点与遥测安装后需确认你的应用已安装 peer 依赖包括react 18.0.0、cubejs-client/core 0.30.0、cubejs-client/react 0.30.0、antd 4.16.13以及styled-components 6.0.0等详见 package.json 的peerDependencies。嵌入 QueryBuilder 组件README 提供了最小可运行示例创建一个查询对象通过apiUrl指向 Cube API通过token传入安全凭证然后将query作为initialVizState传给QueryBuilder /import { QueryBuilder } from cubejs-client/playground; // 引入 antd 样式cubejs-client/playground 覆盖了部分 antd 变量推荐使用它自带的样式 import cubejs-client/playground/lib/antd.min.css; // 也可以使用 antd 默认样式 // import antd/dist/antd.min.css; const apiUrl http://localhost:4000/cubejs-api/v1; const token your.token; export default function App() { const query { measures: [Orders.count], dimensions: [Orders.status] }; return ( QueryBuilder apiUrl{apiUrl} token{token} initialVizState{{ query }} / ); }其中apiUrl是 Cube API 的 HTTP 端点地址形如http://localhost:4000/cubejs-api/v1token是访问 Cube 后端所需的 JWT 令牌用于通过认证与授权校验initialVizState描述组件的初始可视化状态query字段遵循 Cube 查询格式measures、dimensions等。深入理解 token 处理Playground 对 token 的处理并不仅限于“直接传入”。在应用入口 src/index.tsx 中onTokenPayloadChange会在没有 token 时向playground/token端点发起 POST 请求由服务端根据 payload 签发 token——这是 Playground 内嵌到 Cube 服务端时使用的动态换取机制。嵌入组件时你也可以通过组件的onTokenPayloadChange/tokenUpdater属性接入自定义的 token 更新逻辑。部署 chart-renderers 图表渲染资源README 特别强调嵌入组件后还需要把 Playground 的图表渲染器chart renderers静态资源拷贝到应用的公开目录。假设你的应用公开目录为public可在项目根目录执行#!/bin/bash rm -rf ./public/chart-renderers 2 /dev/null cp -R ./node_modules/cubejs-client/playground/public/chart-renderers ./public这一步非常关键QueryBuilder 运行时会通过 ChartRenderer 等组件动态加载这些图表渲染器来绘制柱状图、折线图、透视表等可视化结果。如果遗漏该步骤图表区域将无法正常渲染。在仓库中这些静态资源由包内的public/目录承载package.json 的files字段显式包含了public同时public/下还包含 antd 样式、字体资源与各类图标资源。提示以上脚本中的rm -rf仅用于清理旧的渲染器目录请在确认目标路径正确后执行。QueryBuilder 的完整属性与源码剖析仓库源码中 QueryBuilder 的对外属性在 src/playground/components/QueryBuilder.tsx 与 src/QueryBuilderV2/types.ts 中有完整定义核心属性如下属性类型说明apiUrlstringCube API 端点地址tokenstringJWT 令牌组件层面对应apiTokeninitialVizStateVizState初始可视化状态包含querydefaultQueryQuery默认查询对象defaultChartTypeChartType默认图表类型defaultPivotConfigPivotConfig默认透视配置schemaVersionnumberSchema 版本号用于触发元数据刷新onSchemaChange(props) voidSchema 变化回调onQueryChange({ query, chartType }) void查询变化回调shouldRunDefaultQueryboolean挂载后是否自动执行默认查询apiVersionstringAPI 版本标识isApiBlockedboolean是否阻止 API 请求memberViewTypename \| title成员展示方式名称或标题VizardComponentFC自定义 Vizard 可视化组件RequestStatusComponentFC自定义请求状态展示组件openSqlRunner(sql) void打开 SQL Runner 的回调tracking{ event }埋点事件回调extraReactNode附加内容插槽从实现上看组件内部src/QueryBuilderV2/QueryBuilder.tsx会通过cubejs-client/core的cube(apiToken, { apiUrl })创建 API 客户端实例再借助useQueryBuilderhook 加载 Cube 元数据meta、Cube 列表、成员信息并驱动runQuery执行查询meta/metaError元数据加载状态元数据未就绪时组件会渲染“Loading meta information...”卡片加载失败则展示错误详情src/QueryBuilderV2/QueryBuilder.tsx当设置了defaultQuery且shouldRunDefaultQuery为真时组件会在元数据就绪后自动执行一次查询src/QueryBuilderV2/QueryBuilder.tsxqueryValidator会在查询为空时自动注入用户最近使用过的时区src/QueryBuilderV2/QueryBuilder.tsx包还提供了useCubejsApi之类的 hookssrc/hooks/cubejs-api.ts供你在自定义扩展中复用同一套 API 客户端创建逻辑。组件内部基于 React ContextQueryBuilderContext.Provider向下传递查询执行、元数据、选中 Cube 等状态UI 层则包含成员选择ListMember、MemberDropdown、过滤条件FilterGroup、LogicalFilter、时间维度TimeGroup、TimeDateRangeSelector、透视配置Pivot、图表渲染ChartRenderer与 SQL 预览QueryBuilderSQL、QueryBuilderGeneratedSQL等模块功能与 Cube 开发环境中的 Explore 页面保持一致。组件包与服务端 Playground 的关系cubejs-client/playground与 Playground 完整应用同源同仓库。仓库的 package.json 中build:playground脚本会执行 Vite 构建并将产物拷贝到cubejs-server-core/playground/目录从而让 Cube 服务端在开发模式下直接托管 Playground 应用而build:lib脚本则通过tsc编译出可供外部 npm 引用的库文件lib/这正是本文嵌入用法的产物来源。理解这一点有助于你在调试时判断Playground 既可以是服务端托管的完整应用也可以是被 npm 引入的独立 React 组件。小结通过cubejs-client/playground你可以把 Cube 的查询构建体验无缝嵌入自己的 React 应用安装包 → 拷贝chart-renderers静态资源 → 传入apiUrl与token→ 用initialVizState指定初始查询。在此基础上充分利用defaultQuery、onQueryChange、schemaVersion、VizardComponent等扩展属性即可实现默认报表、实时联动、自定义可视化等高级场景。该包采用 MIT 许可证见 packages/cubejs-playground/LICENSE可放心用于商业项目。【免费下载链接】cube Cube Core is open-source semantic layer for AI, BI and embedded analytics项目地址: https://gitcode.com/gh_mirrors/cu/cube创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表