You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Material React Table API取数时null属性读取错误的解决方案咨询

问题解决方案

报错原因:你的数据中部分行的stockCardType、stockType或unit字段为null,当Material React Table通过accessorKey访问嵌套的.name属性时,会触发空值读取错误。针对你的两个问题,解决方案如下:


1. 错误解决方法

提供两种直接可行的修复方式,按需选择:

方法一:列定义中使用accessorFn替代accessorKey(推荐)

无需修改原始数据,直接在列配置中做空值检查并设置默认值,灵活性更高:

const columns = useMemo(
  () => [
    // ...其他列保持不变
    {
      accessorFn: (row) => row.stockType?.name ?? "无数据",
      header: "Stok Tipi",
    },
    {
      accessorFn: (row) => row.stockCardType?.name ?? "无数据", // 修复报错字段
      header: "Stok Kart Tipi",
    },
    {
      accessorFn: (row) => row.unit?.name ?? "无数据",
      header: "Birim",
    },
    // ...其他列保持不变
  ],
  []
);

原理:row.stockCardType?.name通过可选链运算符?.跳过空值读取,?? "无数据"用空值合并运算符设置默认显示文本。

方法二:预处理API返回数据

如果希望继续使用accessorKey,可以在设置rows前统一修复空值嵌套字段:

const getStockCardList = async () => {
  setShowLoader(true);
  search.filter.accountId = decoded.accountId;
  search.filter.supplierId = decoded.supplierId;
  var response = await getStockCardSearch(search);
  // 预处理:将null的嵌套字段替换为空对象
  const processedRows = response?.data?.data?.map(row => ({
    ...row,
    stockType: row.stockType ?? {},
    stockCardType: row.stockCardType ?? {},
    unit: row.unit ?? {},
  })) || [];
  setRows(processedRows);
  setShowLoader(false);
};

原理:把null的嵌套对象替换为空对象{},此时accessorKey: "stockCardType.name"会读取到undefined,表格会显示空值而非报错。


2. 关于空值检查与默认值的说明

完全可以使用**可选链运算符?.做空值检查,搭配空值合并运算符??**设置默认值,上述两种方法已经分别实现了这一需求。


内容的提问来源于stack exchange,提问作者Doğukan Doğan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 14:50:34