🔖

react-table

2023/08/16に公開

import React, { useEffect, useState } from "react";
import { useTable } from "react-table";
import { fetchItems } from "../mockApi";
import { mockData } from "../mockApi";
type Props = {
columns: any;
data: any;
};
console.log(mockData, "mok");
const DataTable = ({ columns, data }: Props) => {
const { getTableProps, getTableBodyProps, headerGroups, rows, prepareRow } =
useTable({
columns,
data,
});
const [items, setItems] = useState([]);
useEffect(() => {
fetchItems().then((data: any) => {
setItems(data);
});
}, []);
const generateData = (index: any) => {
return {
id: index + 1,
name: Item ${index + 1},
};
};

const items2 = Array.from({ length: 6 }, (_, index) => generateData(index));
const renderItems = () => {
return Array.from(items, (item: any) => <li key={item.id}>{item.name}</li>);
};

const renderItems2 = () => {
return Array.from({ length: 10 }, (mockData: any, index) => {
return mockData?.map((v: any) => v.name);
});
};
console.log(renderItems2(), "renderItems2");

const mockData = { id: 1, name: "Item 1" };

const renderItems3 = () => {
return Array.from({ length: 10 }, (mockData, index) => {
// モックデータからnameプロパティを取得して配列に格納
// return mockData.map((item) => item);
});
};
console.log(renderItems3(), "renderItems3");
console.log(headerGroups[0].headers, "header");
const [selectedColumn, setSelectedColumn] = useState(null);
const allowClick = () => {
alert("uuuuu");
};
return (
<div className="table-container">
<table {...getTableProps()} className="table">
<thead>
{headerGroups.map((headerGroup: any) => (
<tr {...headerGroup.getHeaderGroupProps()}>
{headerGroup.headers.map((column: any) => (
// <th>
// {column.render("Header") === "ID" ? <span>矢印</span> : ""}

            //   {column.render("Header")}
            // </th>
            <th
              key={column.id}
              className={selectedColumn === column ? "selected" : ""}
            >
              {column.render("Header") === "ID" ||
              column.render("Header") === "Name" ? (
                <span onClick={allowClick}>矢印</span>
              ) : (
                ""
              )}
              {column.render("Header")}
            </th>
          ))}
        </tr>
      ))}
    </thead>
    <tbody {...getTableBodyProps()}>
      {rows.map((row: any) => {
        prepareRow(row);
        console.log(rows, "rows");
        return (
          <tr {...row.getRowProps()}>
            {row.cells.map((cell: any) => {
              return (
                <td {...cell.getCellProps()}>{cell.render("Cell")}</td>
              );
            })}
          </tr>
        );
      })}
    </tbody>
  </table>
  <div>
    <h2>Item List</h2>
    <ul>
      {items.map((item: any) => (
        <li key={item.id}>{item.name}</li>
      ))}
    </ul>
    <ul>
      {items2.map((item: any) => (
        <li key={item.id}>{item.name}</li>
      ))}
    </ul>
  </div>
</div>

);
};

export default DataTable;

Discussion