@influxdata/giraffe的tableGraph渲染报错:无法读取undefined的'data'属性
报错原因与解决方案
核心报错原因
你遇到的TypeError: Cannot read properties of undefined (reading 'data')报错主要来自两个配置错误,外加一个常见的异步渲染问题:
- fieldOptions配置格式错误:giraffe的table组件要求
fieldOptions为数组格式,用来配置所有需要展示的字段属性,你当前写的是单个对象,组件解析字段时会拿到undefined,读取子属性data时就抛出报错。 - tableLayer层级属性位置错误:
timeZone、tableTheme是table图层的properties子属性,不是图层根节点的属性,配置位置错误也会导致组件读取配置时出现空值。 - 异步数据未就绪:如果
fluxResponse.table是接口请求返回的异步数据,在请求未完成时该值为undefined,直接传入config也会触发该报错。
修复后的配置参考
1. 修正tableLayer配置
const tableLayer = { type: "table", properties: { colors: DEFAULT_TABLE_COLORS, timeZone: "America/Phoenix", // 移到properties内部 tableTheme: "light", // 移到properties内部 tableOptions: { fixFirstColumn: false, verticalTimeAxis: false, sortBy: { internalName: "_time", displayName: "_time", visible: true, }, }, // 改为数组,可添加所有需要展示的字段 fieldOptions: [ { internalName: "_time", displayName: "_time", visible: true, }, // 可以继续添加其他字段,比如_value、_measurement等 { internalName: "_value", displayName: "数值", visible: true, } ], timeFormat: "YYYY-MM-DD HH:mm:ss ZZ", decimalPlaces: { isEnforced: true, digits: 3, }, }, };
2. 加异步加载判断,避免数据未就绪时渲染组件
<HoverTimeProvider> <div style={{ width: "calc(70vw - 20px)", height: "calc(70vh - 20px)", margin: "40px", }} > {/* 加空值判断,数据就绪后再渲染Plot组件 */} {fluxResponse?.table ? <Plot config={{ table: fluxResponse.table, layers: [tableLayer], }} /> : <div>数据加载中</div>} </div> </HoverTimeProvider>
3. 额外检查项
确认DEFAULT_TABLE_COLORS已经正确导入,未导入的话可以直接使用giraffe内置的默认表格配色数组即可。
内容的提问来源于stack exchange,提问作者John Ortega
相关产品推荐
相关产品推荐

