说明
我想创建这样的表:
不过,我已经做得很好,但我怀疑我的代码,它似乎太复杂,不简单。
下面是我的代码:
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。
任何帮助都将不胜感激,谢谢。
1条答案
按热度按时间tsm1rwdh1#
听起来您需要对您的工作代码进行代码评审。
我不认为我会改变太多,如果有的话,因为这是一个相当直接的表呈现在React。
通常动态呈现用于动态数据,实际上,对静态内容使用动态呈现似乎有些奇怪。
一些小建议:
1.厄运金字塔:由于代码很长,而且由于.jsx层次结构(而不是逻辑路径),您具有厄运金字塔,因此您可以将tbody分离到它自己的组件中。2然后,您可以使用prop drilling或react context将所需的变量向下传递到tbody组件。
1.每次函数被重新呈现时,硬编码的表数据也会被重新呈现,可能整个组件都使用
useMemo
,因为它目前没有任何依赖关系,实际上只需要呈现一次。