【问题标题】:Mapping data from mongoDB to Mat UI DataGrid将数据从 mongoDB 映射到 Mat UI DataGrid
【发布时间】:2022-01-18 06:07:47
【问题描述】:

我正在尝试将后端查询的数据映射到前端 Material UI DataGrid 组件。我遇到了一个问题,我的页面加载了一会儿,它查询我的数据库,我可以看到它尝试呈现数据,但它进入了一个白页。我在控制台中没有看到任何错误,并且我的后端运行正常,并且已经使用 Material UI 的表进行了测试。以下是我的代码:

import React, { useEffect, useState, useMemo } from "react";
import { useNavigate } from "react-router-dom";

import { DataGrid } from "@mui/x-data-grid";

import Table from "@mui/material/Table";
import TableBody from "@mui/material/TableBody";
import TableCell from "@mui/material/TableCell";
import TableContainer from "@mui/material/TableContainer";
import TableHead from "@mui/material/TableHead";
import TableRow from "@mui/material/TableRow";
import Paper from "@mui/material/Paper";

import IconButton from "@mui/material/IconButton";
import { AddCircleOutline } from "@mui/icons-material";

import { userCartsRounded } from "../../api/wowTeamRoutes";

function Rounding() {
  const [cartsRounded, setCartsRounded] = useState([]);

  let navigate = useNavigate();

  useEffect(() => {
    userCartsRounded()
      .then((response) => {
        setCartsRounded(response.data);
        console.log("test");
        console.log(cartsRounded);
      })
      .catch((err) => {
        console.log(err);
      });
  }, []);

  const columns = [
    { field: "serialNum", headerName: "Cart Serial Number", width: 150 },
    { field: "pcNum", headerName: "Workstation Number", width: 150 },
    { field: "dateLastRounded", headerName: "Last Rounded On", width: 150 },
  ];

  const rows = useMemo(
    () => cartsRounded.map((row, index) => ({ ...row, id: row._id })),
    [cartsRounded]
  );

  return (
    <div>
      <IconButton
        color="primary"
        aria-label="new rounding"
        component="span"
        onClick={() => {
          navigate("add_new_cart");
        }}
      >
        <AddCircleOutline />
      </IconButton>
      <DataGrid
        component={Paper}
        rows={cartsRounded}
        getRowId={rows}
        columns={columns}
        pageSize={5}
        rowsPerPageOptions={[5]}
      />
    </div>
  );
}

export default Rounding;

【问题讨论】:

    标签: reactjs datagrid material-ui


    【解决方案1】:

    您不需要再次循环通过从 api 获得的数据。 试试这个:

    function Rounding() {
      const [cartsRounded, setCartsRounded] = useState([]);
    
      let navigate = useNavigate();
    
      useEffect(() => {
        userCartsRounded()
          .then((response) => {
            setCartsRounded(response.data);
            console.log("test");
            console.log("test");
            console.log("test");
            console.log(cartsRounded);
          })
          .catch((err) => {
            console.log(err);
          });
      }, []);
    
      const columns = [
        { field: "serialNum", headerName: "Cart Serial Number", width: 150 },
        { field: "pcNum", headerName: "Workstation Number", width: 150 },
        { field: "dateLastRounded", headerName: "Last Rounded On", width: 150 },
      ];
    
      return (
        <div>
          <IconButton
            color="primary"
            aria-label="new rounding"
            component="span"
            onClick={() => {
              navigate("add_new_cart");
            }}
          >
            <AddCircleOutline />
          </IconButton>
          <DataGrid
            component={Paper}
            rows={cartsRounded}
            columns={columns}
            pageSize={5}
            rowsPerPageOptions={[5]}
          />
          {roundingModal && <AddRoundedCart />}
        </div>
      );
    }
    

    【讨论】:

    • 试一试,但我仍然遇到同样的问题,即遇到白屏。我的浏览器显示当前错误:The data grid component requires all rows to have a unique id property. A row was provided without id in the rows prop: 这可能是由于返回的文档具有其他字段,我没有为其建立唯一 ID,因为我只想显示序列号、电脑编号和附加到该文档的日期。非常感谢您的帮助。
    • 这已经很好了。这意味着您需要创建一个您的 api 中没有的 id。将此添加到您的代码中。 ' const rows= useMemo( () => cartsRou​​nded.map((row, index) => ({ ...row, id: row.serialNum })), [cartsRou​​nded], )'
    • 在 jsx 中'rows={rows}
    • 在我的数据库方面,该特定文档有一个 id。我的文档是从 API 返回的:_id: new ObjectId("61b9479422763a1760d2f4af"), cartSerialNumber: 'safgafasfafasaf', pcNumber: 'grdgrdgrdzgdgdg', isPowerCordDamaged: false, isFuseBlown: false, isInverterBad: false, isInterfaceDamaged: false, isPhysicalDamage: false, otherNotes: '', roundedBy: '6186c13beb18d33d5088f7b2', createdAt: 2021-12-15T01:40:36.355Z, updatedAt: 2021-12-15T01:40:36.355Z, __v: 0
    • 添加该代码时出现以下错误:TypeError: t is not a function
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-07-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-27
    • 2023-01-01
    • 1970-01-01
    相关资源
    最近更新 更多