带有嵌套数据的材质 UI 数据网格

IT技术 javascript json reactjs material-ui react-data-grid
2021-05-26 23:58:21

如何在react材料 UI 数据网格上呈现嵌套的 JSON 数据。在附加的沙箱中,我想在数据网格上显示来自 json 的用户的电话号码-嵌套的 JSON 数据网格

4个回答

为了解决这个问题,让我们看看params函数中传入对象valueGetter记录row下来,你会在它下面找到一个对象。params.getValue()您应该访问该row对象而不是使用似乎params.getValue()只能用于一级 JSON 对象。这是输出phone字段的代码片段

  {
    field: "phone",
    headerName: "Phone",
    width: 160,
    valueGetter: (params) => {
      console.log({ params });
      let result = [];
      if (params.row.phone) {
        if (params.row.phone.home) {
          result.push("home: " + params.row.phone.home);
        }
        if (params.row.phone.office) {
          result.push("office: " + params.row.phone.office);
        }
      } else {
        result = ["Unknown"];
      }
      return result.join(", ");
    }
  }

更新

为了更灵活地检查对象下的每个键是否存在,我创建了一个辅助方法:

const checkKeysUnderObject = (obj, result) => {
  for (let key in obj) {
    if (key) { // push the value to the result array only if key exists
      result.push(key + ": " + obj[key]);
    }
  }
};

辅助方法的使用:

if (params.row.phone) {
  checkKeysUnderObject(params.row.phone, result);
}else{
  result = ["Unknown"];
}

我还在这里更新了代码和框

我在我的项目中使用它:

{ 
    field: 'idMaintenancePlan',
    headerName: 'Plan de maintenance', 
    sortable: false, width: 200, 
    valueFormatter: (params) => params.row?.maintenancePlan?.name 
}

这对我来说很好用

{ field: 'parserInfo', headerName: 'Parser Title', valueFormatter: ({ value }) => value.title }

这也很好用

{
     field: "family",
     headerName: "Family",
     width: 150,
     renderCell: (params) => {
       return <div className="rowitem">{params.row.family.name}</div>;
     },
},