우선 어그로 끌어서 죄송(안)합니다.
오신김에 React MUI 쓰는 방법이나 보고 가시죠.
자주 사용하는 기능 몇 가지 중에 테이블만 확인할 것입니다.
코드는 공식 문서에 있는 걸 그대로 복붙해서 이해해 보겠습니다.
다 읽는데 정확히 5분 걸립니다. 갑시다.
npm install @mui/material @emotion/react @emotion/styled
모듈 설치 하기
npm i @mui/x-data-grid
// App.js
import React, { useState } from "react";
import { DataGrid } from "@mui/x-data-grid"; // 🔥 1
function App() {
const [pageSize, setPageSize] = useState(5); // 4-1
// 🔥 2
const columns = [
{ field: "id", headerName: "ID", width: 70 },
{ field: "firstName", headerName: "First name", width: 130 },
{ field: "lastName", headerName: "Last name", width: 130 },
{
field: "age",
headerName: "Age",
type: "number",
width: 90,
},
{
field: "fullName",
headerName: "Full name",
description: "This column has a value getter and is not sortable.",
sortable: false,
width: 160,
valueGetter: params =>
`${params.row.firstName || ""} ${params.row.lastName || ""}`,
},
];
// 🔥 3
const rows = [
{ id: 1, lastName: "Snow", firstName: "Jon", age: 35 },
{ id: 2, lastName: "Lannister", firstName: "Cersei", age: 42 },
{ id: 3, lastName: "Lannister", firstName: "Jaime", age: 45 },
{ id: 4, lastName: "Stark", firstName: "Arya", age: 16 },
{ id: 5, lastName: "Targaryen", firstName: "Daenerys", age: null },
{ id: 6, lastName: "Melisandre", firstName: null, age: 150 },
{ id: 7, lastName: "Clifford", firstName: "Ferrara", age: 44 },
{ id: 8, lastName: "Frances", firstName: "Rossini", age: 36 },
{ id: 9, lastName: "Roxie", firstName: "Harvey", age: 65 },
];
return (
<div style={{ height: 400, width: "100%" }}>
<DataGrid // 🔥 4
rows={rows}
columns={columns}
pageSize={pageSize} // 4-1
onPageSizeChange={newPageSize => setPageSize(newPageSize)} // 4-2
rowsPerPageOptions={[1, 2, 3, 5]} // 4-3
checkboxSelection
/>
</div>
);
}
export default App;
크게 4파트에 대해서 알아보겠습니다.
npm i @mui/x-data-grid-generator
import React, { useState } from "react";
import { DataGrid, GridToolbar } from "@mui/x-data-grid"; // 🔥 1
import { useDemoData } from "@mui/x-data-grid-generator"; // 🔥 2
function App() {
const VISIBLE_FIELDS = [ // 🔥 3
"name",
"rating",
"country",
"dateCreated",
"isAdmin",
];
const { data } = useDemoData({ // 🔥 4
dataSet: "Employee",
visibleFields: VISIBLE_FIELDS,
rowLength: 100,
});
const [filterModel, setFilterModel] = useState({ // 🔥 5
items: [
{
columnField: "rating",
operatorValue: ">",
value: "2.5",
},
],
});
return (
<div style={{ height: 400, width: "100%" }}>
<DataGrid // 🔥 6
{...data}
components={{
Toolbar: GridToolbar, // 🔥 7
}}
filterModel={filterModel} // 🔥 8
onFilterModelChange={newFilterModel => setFilterModel(newFilterModel)} // 🔥 9
/>
</div>
);
}
export default App;
어그로에 화났지만 당신 근육을 보니 화가 풀립니다