reactjs 如何使用React JS有效地创建表?

y0u0uwnf  于 2023-03-12  发布在  React
关注(0)|答案(1)|浏览(133)

说明

我想创建这样的表:

不过,我已经做得很好,但我怀疑我的代码,它似乎太复杂,不简单。
下面是我的代码:

const FormCreateRole = ({ switches, onChange }) => {
  // Array for table header and its data
  const tableHeader = [
    "No",
    "Menu",
    "Sub Menu",
    "Lihat",
    "Tambah",
    "Ubah",
    "Hapus",
    "Export",
  ];

  const submenu = [
    ["-"],
    [
      "Akun Pengguna",
      "Grup & Kontrol Hak Akses Akun",
      "Antrian Pasien",
      "Rawat Jalan",
    ],
    ["Pemeriksaan Penunjang", "Rekam Medis", "Admisi Rawat Jalan"],
    ["Status dan Penempatan Kamar", "Transfer Pasien"],
  ];

  let i = 1;

  const tableDataMenu = [
    [i++, "Dashboard", submenu[0], "", null, null, null, ""],
    [i++, "Konfigurasi/Pengaturan", submenu[1], "", "", "", "", null],
    [i++, "Layanan Pasien", submenu[2], "", "", "", "", null],
    [i++, "Rawat Inap", submenu[3], "", "", "", "", null],
  ];
  // end Array data

  return (
    <Table className="table-responsive">
      <thead style={{ backgroundColor: "#ECEFF1" }}>
        <tr>
          {tableHeader.map((header, index) => (
            <th
              key={index}
              className="txt-blue-grey-700 base-md text-bold text-center"
              style={{ padding: "0.75rem" }}
            >
              {header}
            </th>
          ))}
        </tr>
      </thead>
      <tbody>
        {tableDataMenu.map((row, idx) => (
          <React.Fragment key={idx}>
            <tr>
              {row.slice(0, 2).map((cell, idx) => (
                <td key={idx} className="text-center">
                  {cell}
                </td>
              ))}
              <td>
                {row[2] && (
                  <div>
                    {row[2].map((sub, idx) => (
                      <div key={idx} className="mb-3">
                        {sub}
                      </div>
                    ))}
                  </div>
                )}
              </td>
              {row.slice(3).map((cell, idx) => {
                return (
                  <td key={idx}>
                    {row[2] &&
                      row[2].map((subIdx) => {
                        if (cell !== null) {
                          return (
                            <div key={subIdx} className="mb-3 text-center">
                              <Form.Check
                                type="switch"
                                id={`${subIdx}-${idx}`}
                                label=""
                                checked={switches[`action${idx}`]}
                                onChange={onChange}
                              />
                            </div>
                          );
                        }
                      })}
                  </td>
                );
              })}
            </tr>
          </React.Fragment>
        ))}
      </tbody>
    </Table>
  );
};

问题

你能帮助我高效,可读和有效地创建代码的表吗?我道歉,我目前正在学习很多,并努力掌握ReactJS。
任何帮助都将不胜感激,谢谢。

tsm1rwdh

tsm1rwdh1#

听起来您需要对您的工作代码进行代码评审。
我不认为我会改变太多,如果有的话,因为这是一个相当直接的表呈现在React。
通常动态呈现用于动态数据,实际上,对静态内容使用动态呈现似乎有些奇怪。
一些小建议:
1.厄运金字塔:由于代码很长,而且由于.jsx层次结构(而不是逻辑路径),您具有厄运金字塔,因此您可以将tbody分离到它自己的组件中。2然后,您可以使用prop drilling或react context将所需的变量向下传递到tbody组件。
1.每次函数被重新呈现时,硬编码的表数据也会被重新呈现,可能整个组件都使用useMemo,因为它目前没有任何依赖关系,实际上只需要呈现一次。

相关问题