React - Material UI table 在每一行中包含一个下拉列表

React - Material UI table to contain a dropdown in each row

所以我有这个 Table 我已经从数组映射中渲染了它的行,如下所示

<TableContainer component={Paper}>
            <Table className={classes.table} aria-label="simple table">
              <TableHead>
                <TableRow>
                  <TableCell>Object Name</TableCell>
                  <TableCell align="center">Object Field and Values</TableCell>
                </TableRow>
              </TableHead>
              <TableBody>
                {union &&
                  unionArray.map((row) => (
                    <TableRow key={row.name}>
                      <TableCell component="th" scope="row">
                        {row.name}
                      </TableCell>
                      {Object.keys(row).map((key) =>
                        key === "name" ? (
                          ""
                        ) : (
                          <TableCell align="center">
                            {/*insert dropdown select*/}
                            <FormControl
                              variant="outlined"
                              className={classes.formControl}
                            >
                              <InputLabel htmlFor="outlined-age-native-simple">
                                Values
                              </InputLabel>
                              <Select
                                native
                                label="Value"                                
                              >
                                <option aria-label="None" value="" />
                                <option>{key}:{row[key]}</option>                                
                              </Select>
                            </FormControl>
                          </TableCell>
                        )
                      )}
                    </TableRow>
                  ))}
              </TableBody>
            </Table>
          </TableContainer>

我映射的对象数组如下所示。即 UnionArray

我的问题是具有第三对 key/value 的行呈现为整个 table 单元格,我只希望它们成为下拉列表的一部分。现在的输出是这样的

将对象转换为类似

的格式
[{
    name: 'obj1',
    values: [
      {
        a: 1
      }
    ]
  },
  {
    name: 'obj3',
    values: [
      {
        c: 2,
        d: 5
      }
    ]
  }
]

我没有足够的声誉来发表评论,但答案在于@lakshya 的回复和@ahmed 的评论。当 key === 'name' 时,return 将 return 为空,但当键不是 name 时,return 将 JSX 有效,因此,您的 table 有 2 个下拉菜单的单元格。

至于如何格式化响应,您可以像附图中那样格式化循环。

你可以修改你从 api 得到的数组,然后像这样做:

let modifiedUnion = unionArray.map(el=>{
  let tempObj={}
  let values=[]
  Object.keys(el).map(key=>
    if(key!=="name"){
      tempObj.values = values.push({[key]:el[key]})
    }else{
      tempObj.name = el.name
    }
  return tempObj
})

然后像这样写这部分:

{modifiedUnion.map((row) => (
  <TableRow key={row.name}>
    <TableCell align="center">
      {row.name}
    </TableCell>
    <TableCell align="center">
      <FormControl variant="outlined" className={classes.formControl}> 
        <InputLabel htmlFor="outlined-age-native-simple">
          Values
        </InputLabel>
        <Select native label="Value">
          <option aria-label="None" value="" />
            {row.values.map((key) =>
              <option>{Object.keys(key)[0]}:{Object.values(key)[0]}</option>    
            )}                             
        </Select>
      </FormControl>
    </TableCell>
  </TableRow>
))}