metric card:入门仪表板组件
案例背景
metric_card 是 NeoMind 仪表板组件市场中最简单的「有意义的组件」——它把一个或多个数值(温度、电池电量、推理延迟、检测到的目标数)渲染成一张毛玻璃卡片,带标签、单位、小数位精度。整个组件 352 行手写 IIFE JavaScript,不依赖任何构建步骤,是新手理解「一个 NeoMind 组件由哪些部分组成」的最短路径。
它解决了什么问题? 仪表板需要展示数值型指标,但指标的数据来源五花八门:可能是设备实时遥测(values.battery)、扩展周期产出(temperature_c)、系统指标(cpu.usage)或信息属性(name)。metric_card 抽象掉这些差异,提供一个统一的「数值展示卡片」——用户只需绑定数据源并填写标签/单位,组件就能自动拉取数据、格式化、布局。
目标读者:刚读完 组件 API 通用参考、想动手写第一个组件的开发者。需要理解 React 基础(hooks、JSX),但不需要任何打包工具链知识——NeoMind 组件刻意避开了 Webpack / Vite / Rollup,让任何人都能直接写、直接部署。
在生态中的位置:metric_card 是「显示型组件」的范本——它不绑定特定设备类型(has_device_binding: false)、不发起 AI 推理、不渲染图像/视频。后续案例中,#7(ne101_camera)会在 metric_card 的基础上增加设备绑定、图像画布、AI 处理流水线。掌握了本案例的 8 节内容,你就掌握了所有 NeoMind 组件的骨架:IIFE 注入模式、manifest 契约、fetchData 数据拉取、OKLCH 视觉系统。
你将学到:为什么 NeoMind 组件用 IIFE + window.React 注入而非 ESM 打包;manifest.json 的 size_constraints / has_data_source / config_schema 字段如何决定组件在仪表板中的行为;extractValue() 如何在 5+ 种数据格式之间做归一化;为什么用 OKLCH + CSS 变量而非硬编码十六进制色值;backdrop-filter 毛玻璃效果如何在无构建步骤下用内联 style 对象实现。
架构总览
metric_card 由三部分协作:组件 bundle(IIFE,自包含注册到 window.NeoMind_MetricCard)、NeoMind 仪表板运行时(Host 页面,提供 React/jsxRuntime + fetchData 注入 + 网格容器)、数据源(设备遥测 / 扩展指标 / 系统指标)。下图展示了加载时序和依赖注入边界。