πŸš€ Big News: Socket Acquires Coana to Bring Reachability Analysis to Every Appsec Team.Learn more β†’
Socket
Book a DemoInstallSign in
Socket

rex-web-table

Package Overview
Dependencies
Maintainers
1
Versions
22
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

rex-web-table

**If you need documentation in English, please refer to README(en).md.**

1.3.0
latest
npm
Version published
Weekly downloads
9
-30.77%
Maintainers
1
Weekly downloads
Β 
Created
Source

1. Introduction

If you need documentation in English, please refer to README(en).md.

  • tanstack/react-table을 ν™œμš©ν•΄ κ΅¬ν˜„λœ ν…Œμ΄λΈ” λΌμ΄λΈŒλŸ¬λ¦¬μž…λ‹ˆλ‹€.
  • React 기반의 ν”„λ‘œμ νŠΈμ—μ„œ ν™œμš©μ΄ κ°€λŠ₯ν•©λ‹ˆλ‹€.
  • ν…Œμ΄λΈ” column/data μ„€μ •, pagination, ν…Œμ΄λΈ” 데이터 μ»€μŠ€ν…€ κΈ°λŠ₯을 μ œκ³΅ν•©λ‹ˆλ‹€.
  • Headless UI둜 μ œμž‘λ˜μ–΄ μŠ€νƒ€μΌλ§ μ»€μŠ€ν…€μ΄ κ°€λŠ₯ν•©λ‹ˆλ‹€.

2. Quick Start

Installation

  • using npm : npm install rex-web-table
  • using yarn : yarn add rex-web-table

CSS Import

/* TableBody의 row 및 subRow의 hoverColorλ₯Ό μ˜¬λ°”λ₯΄κ²Œ μ μš©ν•˜λ €λ©΄, CSS importκ°€ ν•„μš”ν•©λ‹ˆλ‹€. 
   hoverColorλ₯Ό μ œμ™Έν•œ λ‹€λ₯Έ μŠ€νƒ€μΌ (예: padding, margin, border λ“±)은 CSS import 없이도 μ •μƒμ μœΌλ‘œ μž‘λ™ν•©λ‹ˆλ‹€. */
import "rex-web-table/dist/index.css";

Example

const Table = () => {
  // 1. ν…Œμ΄λΈ”μ˜ 각 행에 λŒ€ν•œ 데이터 νƒ€μž… μ •μ˜
  interface Example {
    no: number;
    name: string;
  }

  // 2. ν…Œμ΄λΈ”μ˜ μ—΄ ꡬ쑰 μ •μ˜
  const columns: ColumnDef<Example>[] = [
    {
      accessorKey: "no", // data 와 λ§€ν•‘λ˜λŠ” key
      header: "No.", // μ—΄ 제λͺ©
      size: 10, // μ—΄ 크기 (μ˜΅μ…˜)
    },
    {
      accessorKey: "name",
      header: "Name", // μ—΄ 제λͺ©
      size: 90,
    },
  ];

  // 3. ν…Œμ΄λΈ”μ— ν‘œμ‹œν•  데이터 μ •μ˜
  const data: Array<Example> = [
    {
      no: 1,
      name: "kim",
    },
    {
      no: 2,
      name: "park",
    },
  ];

  // 4. useTable ν›… ν˜ΈμΆœν•˜μ—¬ ν…Œμ΄λΈ”, νŽ˜μ΄μ§€λ„€μ΄μ…˜ 데이터 생성
  const { table, pagination, setPagination, totalPageNum } = useTable({
    data, // ν…Œμ΄λΈ” 데이터
    columns, // ν…Œμ΄λΈ” μ—΄
    isPagination: true, // νŽ˜μ΄μ§€λ„€μ΄μ…˜ 적용
  });

  // 5. 제곡된 μ»΄ν¬λ„ŒνŠΈ (TableProvider, TableHeader, TableBody, TableFooter)λ₯Ό μ‚¬μš©ν•˜μ—¬ ν…Œμ΄λΈ” λ Œλ”λ§
  return (
    <div>
      <TableProvider>
        <TableHeader table={table} /> {/* ν…Œμ΄λΈ” 헀더 λ Œλ”λ§ */}
        <TableBody table={table} /> {/* ν…Œμ΄λΈ” λ³Έλ¬Έ λ Œλ”λ§ */}
      </TableProvider>

      {/* νŽ˜μ΄μ§€λ„€μ΄μ…˜ μ»¨νŠΈλ‘€μ„ ν¬ν•¨ν•œ ν‘Έν„° λ Œλ”λ§ */}
      <TableFooter
        pagination={pagination}
        setPagination={setPagination}
        totalPageNum={totalPageNum}
      />
    </div>
  );
};

export default Table;

3. API Reference

3.1 TableProvider

  • TableHeader, TableBody λ₯Ό κ°μ‹ΈλŠ” Provider둜, 각 μ»΄ν¬λ„ŒνŠΈμ— propsλ₯Ό μ „λ‹¬ν•˜λŠ” 역할을 μˆ˜ν–‰ν•©λ‹ˆλ‹€.
    PropsTypeExplainRequired
    useParentRowUibooleanSubRowλ₯Ό ν™œμš©ν•  λ•Œ λΆ€λͺ¨ Row의 UIλ₯Ό κ·ΈλŒ€λ‘œ 상속받아 SubRowλ₯Ό 생성할지 μ—¬λΆ€λ₯Ό κ²°μ •ν•©λ‹ˆλ‹€. true일 경우 λΆ€λͺ¨μ˜ UIλ₯Ό μƒμ†λ°›μŠ΅λ‹ˆλ‹€.optional
    SubRowComponentReactNodeSubRow μ»€μŠ€ν…€μ΄ ν•„μš”ν•  경우, 직접 μ»΄ν¬λ„ŒνŠΈλ₯Ό μ „λ‹¬ν•˜μ—¬ ν™œμš©ν•©λ‹ˆλ‹€.optional
    subRowContentsArray<object[]>SubRow μ»΄ν¬λ„ŒνŠΈμ—μ„œ ν™œμš©λ˜λŠ” λ°μ΄ν„°μž…λ‹ˆλ‹€.optional
    rowClickEventfunctionTable의 행을 ν΄λ¦­ν–ˆμ„ λ•Œ μ‹€ν–‰λ˜λŠ” ν•¨μˆ˜μž…λ‹ˆλ‹€.optional
    cellClickEventfunctionTable의 각 셀을 ν΄λ¦­ν–ˆμ„ λ•Œ μ‹€ν–‰λ˜λŠ” ν•¨μˆ˜μž…λ‹ˆλ‹€.optional
    subRowClickEventfunctionSub Row의 행을 ν΄λ¦­ν–ˆμ„ λ•Œ μ‹€ν–‰λ˜λŠ” ν•¨μˆ˜μž…λ‹ˆλ‹€.
    useParentRowUiκ°€ true일 λ•Œλ§Œ μž‘λ™ν•©λ‹ˆλ‹€.
    optional
    subRowCellClickEventfunctionSub Row의 각 셀을 ν΄λ¦­ν–ˆμ„ λ•Œ μ‹€ν–‰λ˜λŠ” ν•¨μˆ˜μž…λ‹ˆλ‹€.
    useParentRowUiκ°€ true일 λ•Œλ§Œ μž‘λ™ν•©λ‹ˆλ‹€.
    optional
    borderLeftNonebooleanTable border 쀑 left ν‘œμ‹œ μ—¬λΆ€
    left nav bar와 ν•¨κ»˜ ν™œμš© μ‹œ border κ²ΉμΉ˜λŠ” μƒν™©μ—μ„œ ν™œμš©
    optional
    borderTopNonebooleanTable border 쀑 top ν‘œμ‹œ μ—¬λΆ€
    Top nav bar와 ν•¨κ»˜ ν™œμš© μ‹œ border κ²ΉμΉ˜λŠ” μƒν™©μ—μ„œ ν™œμš©
    optional

/** μ„œλΈŒ ν–‰μ—μ„œ μ‚¬μš©ν•  데이터λ₯Ό μ •μ˜ν•©λ‹ˆλ‹€.
각 μΈλ±μŠ€λŠ” 각 λΆ€λͺ¨ 행에 λŒ€μ‘ν•˜λŠ” μ„œλΈŒ ν–‰μ˜ 데이터λ₯Ό λ‚˜νƒ€λƒ…λ‹ˆλ‹€. **/
const subRowData: Object[] = [
  [
    {
      no: 1,
      name: "kim", // 첫 번째 μ„œλΈŒ ν–‰μ˜ 첫 번째 ν•­λͺ©
    },
    {
      no: 2,
      name: "park", // 첫 번째 μ„œλΈŒ ν–‰μ˜ 두 번째 ν•­λͺ©
    },
  ],
  [
    {
      no: 1,
      name: "lee", // 두 번째 μ„œλΈŒ ν–‰μ˜ 첫 번째 ν•­λͺ©
    },
    {
      no: 2,
      name: "heo", // 두 번째 μ„œλΈŒ ν–‰μ˜ 두 번째 ν•­λͺ©
    },
  ],
];

// useSubRowContents 훅을 ν˜ΈμΆœν•˜μ—¬ μ„œλΈŒ ν–‰μœΌλ‘œ μ„€μ •ν•  μƒνƒœμ™€ μƒνƒœ 관리 ν•¨μˆ˜λ₯Ό κ°€μ Έμ˜΅λ‹ˆλ‹€.
const { subRowContents } = useSubRowContents(subRowData);

return (
  <TableProvider
    useParentRowUi={true} // λΆ€λͺ¨ ν–‰μ˜ UIλ₯Ό μ„œλΈŒ 행에 상속받도둝 μ„€μ •
    subRowContents={subRowContents} // μ„œλΈŒ ν–‰μ—μ„œ μ‚¬μš©ν•  데이터λ₯Ό 전달
    borderLeftNone={true} // μ™Όμͺ½ ν…Œλ‘λ¦¬ ν‘œμ‹œ μ—¬λΆ€ μ„€μ •
    borderTopNone={true} // 상단 ν…Œλ‘λ¦¬ ν‘œμ‹œ μ—¬λΆ€ μ„€μ •
  >
    <TableHeader table={table} /> // ν…Œμ΄λΈ” 헀더 μ»΄ν¬λ„ŒνŠΈ λ Œλ”λ§
    <TableBody table={table} /> // ν…Œμ΄λΈ” λ°”λ”” μ»΄ν¬λ„ŒνŠΈ λ Œλ”λ§
  </TableProvider>
);

  • SubRowComponent clickEvent 의 λ§€κ°œλ³€μˆ˜λŠ” μ•„λž˜μ™€ κ°™μŠ΅λ‹ˆλ‹€

    • SubRowComponent
      ParamsTypeExplainRequired
      contentsobject[]TableProviderμ—μ„œ subRowContents props 둜 μ „λ‹¬ν•œ 데이터optional
    • rowClickEvent와 subRowClickEvent
      ParamsTypeExplainRequired
      rowIndexnumberν΄λ¦­ν•œ ν–‰μ˜ μˆœμ„œoptional
      eMouseEvent클릭 이벀트 객체optional
    • cellClickEvent와 subRowCellClickEvent
      ParamsTypeExplainRequired
      rowIndexnumberν΄λ¦­ν•œ 셀이 μ†ν•œ ν–‰μ˜ μˆœμ„œoptional
      cellIndexnumberν΄λ¦­ν•œ μ…€μ˜ μˆœμ„œoptional
      eMouseEvent클릭 이벀트 객체optional

/* 1. μ»€μŠ€ν„° μ„œλΈŒ ν–‰ μ»΄ν¬λ„ŒνŠΈ μ •μ˜ */
const SubRowComponent = ({ contents }: { contents: Array<object> }) => {
  // μ„œλΈŒ ν–‰μ˜ UIλ₯Ό μ»€μŠ€ν„°λ§ˆμ΄μ¦ˆν•˜μ—¬ λ°˜ν™˜ν•©λ‹ˆλ‹€.
  return; // UI μ»€μŠ€ν…€ λ‘œμ§μ„ 여기에 μž‘μ„±ν•©λ‹ˆλ‹€.
};

return (
  <TableProvider
    SubRowComponent={SubRowComponent} // μ»€μŠ€ν…€ μ„œλΈŒ ν–‰ μ»΄ν¬λ„ŒνŠΈλ₯Ό μ „λ‹¬ν•©λ‹ˆλ‹€.
    subRowContents={subRowContents} // μ„œλΈŒ 행에 μ‚¬μš©ν•  데이터λ₯Ό μ „λ‹¬ν•©λ‹ˆλ‹€.
  >
    <TableHeader table={table} />
    <TableBody table={table} />
  </TableProvider>
);

/* 2. 클릭 이벀트 ν•Έλ“€λŸ¬ μ •μ˜ */

// ν–‰ 클릭 이벀트 ν•Έλ“€λŸ¬
const handleClickRow = ({ rowIndex, e }: RowClickEventParam) => {
  // ν΄λ¦­ν•œ ν–‰μ˜ μΈλ±μŠ€μ™€ 이벀트 객체λ₯Ό ν™œμš©ν•˜μ—¬ λ‘œμ§μ„ μž‘μ„±ν•©λ‹ˆλ‹€.
  /* λ‚΄λΆ€μ—μ„œ rowIndex, e ν™œμš© 및 기타 둜직 μž‘μ„±ν•˜μ—¬ 이벀트 ν•Έλ“€λŸ¬ 생성 */
};

// μ…€ 클릭 이벀트 ν•Έλ“€λŸ¬
const handleClickCell = ({ cellIndex, rowIndex, e }: CellClickEventParam) => {
  // ν΄λ¦­ν•œ μ…€μ˜ 인덱슀, ν–‰ 인덱슀 및 이벀트 객체λ₯Ό ν™œμš©ν•˜μ—¬ λ‘œμ§μ„ μž‘μ„±ν•©λ‹ˆλ‹€.
  /* λ‚΄λΆ€μ—μ„œ cellIndex, rowIndex, e ν™œμš© 및 기타 둜직 μž‘μ„±ν•˜μ—¬ 이벀트 ν•Έλ“€λŸ¬ 생성 */
};

/*
  * 이벀트 ν•Έλ“€λŸ¬μ—μ„œ λ§€κ°œλ³€μˆ˜ ν™œμš© μ˜ˆμ‹œ
    1. rowIndex, cellIndex: νŠΉμ • ν–‰ λ˜λŠ” μ—΄μ—μ„œ μž‘λ™ν•˜λŠ” λ‘œμ§μ„ μž‘μ„±ν•  λ•Œ μ‚¬μš©ν•©λ‹ˆλ‹€.
       예) 두 번째 열인 'name' column의 셀을 ν΄λ¦­ν–ˆμ„ λ•Œ μž‘λ™ν•˜λŠ” μ΄λ²€νŠΈκ°€ ν•„μš”ν•  경우:
       if(cellIndex === 1) { * 둜직 μž‘μ„± * }

    2. e: νŠΉμ • 클릭 μ΄λ²€νŠΈμ— λŒ€ν•œ 이벀트 객체λ₯Ό ν™œμš©ν•΄μ•Ό ν•  λ•Œ μ‚¬μš©ν•©λ‹ˆλ‹€.
       예) νŠΉμ • 셀을 ν΄λ¦­ν–ˆμ„ λ•Œ, row 이벀트 ν•Έλ“€λŸ¬λ‘œ 버블링이 λ°œμƒν•˜μ§€ μ•Šλ„λ‘ ν•˜λ €λ©΄:
       e.stopPropagation(); // 이벀트 버블링을 λ°©μ§€ν•©λ‹ˆλ‹€.

  ** μ„œλΈŒ ν–‰/μ…€ 클릭 μ΄λ²€νŠΈλ„ λ™μΌν•œ λ°©μ‹μœΌλ‘œ ν™œμš©λ©λ‹ˆλ‹€.

*/

return (
  <TableProvider
    useParentRowUi={true} // λΆ€λͺ¨ ν–‰μ˜ UIλ₯Ό μ„œλΈŒ 행에 상속받도둝 μ„€μ •ν•©λ‹ˆλ‹€.
    subRowContents={subRowContents} // μ„œλΈŒ 행에 μ‚¬μš©ν•  데이터λ₯Ό μ „λ‹¬ν•©λ‹ˆλ‹€.
    rowClickEvent={handleClickRow} // ν–‰ 클릭 이벀트 ν•Έλ“€λŸ¬λ₯Ό μ „λ‹¬ν•©λ‹ˆλ‹€.
    cellClickEvent={handleClickCell} // μ…€ 클릭 이벀트 ν•Έλ“€λŸ¬λ₯Ό μ „λ‹¬ν•©λ‹ˆλ‹€.
  >
    <TableHeader table={table} />
    <TableBody table={table} />
  </TableProvider>
);

3.2 TableHeader

  • ν…Œμ΄λΈ” μ—΄ column 제λͺ©μ„ λ Œλ”λ§ν•˜λŠ” μ»΄ν¬λ„ŒνŠΈμž…λ‹ˆλ‹€.
  • header option 을 톡해 layer, rowSpan, colSpan 을 μ œμ–΄ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
  • μ»΄ν¬λ„ŒνŠΈ 호좜 μ‹œ 전달해야 ν•˜λŠ” propsλŠ” μ•„λž˜μ™€ κ°™μŠ΅λ‹ˆλ‹€.
    PropsTypeExplainRequired
    tableTable<TData>useTable 훅이 λ°˜ν™˜ν•˜λŠ” ν…Œμ΄λΈ” 데이터 μΈμŠ€ν„΄μŠ€required
    styleCSSPropertiesinline Style을 톡해 CSS 속성을 μ„€μ •optional
    headerOptionHeaderOptionTypeHeader λ Œλ”λ§ κ΄€λ ¨ μ„ΈλΆ€ 속성 μ„€μ •optional

  • headerOption의 type은 μ•„λž˜μ™€ κ°™μŠ΅λ‹ˆλ‹€.
    PropertyTypeExplain
    accessorKeystringheader와 header option을 λ§€ν•‘ν•˜λŠ” key κ°’
    layernumberheaderκ°€ λͺ‡ 번째 μ€„μ—μ„œ μ‹œμž‘ν• μ§€ κ²°μ •ν•˜λŠ” κ°’
    rowSpannumberμ„€μ •ν•œ layerλ₯Ό κΈ°μ€€μœΌλ‘œ headerκ°€ μ°¨μ§€ν•  높이λ₯Ό κ²°μ •ν•˜λŠ” κ°’
    colSpannumberheaderκ°€ μ°¨μ§€ν•  λ„ˆλΉ„λ₯Ό κ²°μ •ν•˜λŠ” κ°’

// Header μ˜΅μ…˜ νƒ€μž… μ •μ˜
const headerOption: HeaderOptionType[] = [
  { accessorKey: "no", layer: 1, colSpan: 1, rowSpan: 1 }, // 'no' 열에 λŒ€ν•œ μ˜΅μ…˜ μ„€μ •
  { accessorKey: "name", layer: 1, colSpan: 1, rowSpan: 1 }, // 'name' 열에 λŒ€ν•œ μ˜΅μ…˜ μ„€μ •
];

// TableHeader μ»΄ν¬λ„ŒνŠΈ 호좜
<TableHeader
  table={table} // useTable ν›…μ—μ„œ λ°˜ν™˜λœ ν…Œμ΄λΈ” 데이터 μΈμŠ€ν„΄μŠ€
  headerOption={headerOption} // 각 μ—΄μ˜ λ Œλ”λ§ κ΄€λ ¨ μ˜΅μ…˜μ„ 전달
  style={{
    fontSize: "14px", // CSS 속성 μ„€μ •
    padding: "4px", // CSS 속성 μ„€μ •
    border: "1px solid black", // CSS 속성 μ„€μ •
    backgroundColor: "darkgray", // CSS 속성 μ„€μ •
  }}
/>;

3.3 TableBody

  • μ‹€μ œ ν…Œμ΄λΈ” 데이터λ₯Ό λ Œλ”λ§ν•˜λŠ” μ»΄ν¬λ„ŒνŠΈλ‘œ, 각 ν–‰ TableBodyRow와 이λ₯Ό κ΅¬μ„±ν•˜λŠ” μ…€ TableBodyCell둜 κ΅¬μ„±λ˜μ–΄ μžˆμŠ΅λ‹ˆλ‹€.
  • μ€‘μš”: row와 subRow의 hoverColor μŠ€νƒ€μΌμ„ μ μš©ν•˜λ €λ©΄ λ³„λ„λ‘œ CSS importκ°€ ν•„μš”ν•©λ‹ˆλ‹€. hoverColor μ™Έμ˜ λ‹€λ₯Έ μŠ€νƒ€μΌμ€ CSS import 없이도 μ •μƒμ μœΌλ‘œ μž‘λ™ν•©λ‹ˆλ‹€.
  • μ»΄ν¬λ„ŒνŠΈ 호좜 μ‹œ 전달해야 ν•˜λŠ” propsλŠ” μ•„λž˜μ™€ κ°™μŠ΅λ‹ˆλ‹€.
PropsTypeExplainRequired
tableTable<TData>useTable 훅이 λ°˜ν™˜ν•˜λŠ” ν…Œμ΄λΈ” 데이터 μΈμŠ€ν„΄μŠ€required
interactiveStyles{ hoverColor: string; clickedColor: string; }ν…Œμ΄λΈ” ν–‰μ˜ 마우슀 hover μ‹œμ™€ 클릭 μ‹œ 배경색 μ§€μ •hoverColor : optional,
clickedColor : rowSelectionType이 μ„€μ •λœ κ²½μš°μ— ν•„μˆ˜
subRowPropsobjectsubRow κ΄€λ ¨ μ„€μ •optional
rowSelectionType"single" or "multiple" or "grouped"ν–‰ 선택 νƒ€μž…μ„ μ„€μ •optional
defaultSelectedRowIndexnumberrowSelectionType 이 single 일 λ•Œ, κΈ°λ³Έ κ°’μœΌλ‘œ 선택될 ν–‰μ˜ 인덱슀λ₯Ό μ„€μ •ν•©λ‹ˆλ‹€.rowSelectionType이 single일 λ•Œ optional
groupSelectionRangenumberrowSelectionType이 grouped일 λ•Œ, κ·Έλ£Ή 선택 λ²”μœ„λ₯Ό μ„€μ •ν•©λ‹ˆλ‹€. (μ„ νƒν•œ ν–‰ κΈ°μ€€, range 만큼 μœ„/μ•„λž˜ μΆ”κ°€ 선택)rowSelectionType이 grouped일 λ•Œ ν•„μˆ˜

import "rex-web-table/dist/index.css";

1) rowSelectionType을 μ„€μ •ν•˜μ§€ μ•Šμ€ 경우

<TableBody
  table={table}
  style={{
    fontSize: "14px",
    border: "1px solid black",
    textAlign: "center",
  }}
  interactiveStyles={{
    hoverColor: "white", // ν–‰ hover μ‹œ 배경색 μ„€μ •
  }}
/>;


2) rowSelectionType이 "single"인 경우

<TableBody
  table={table}
  style={{
    // ν…Œμ΄λΈ” λ°”λ””μ˜ CSS 속성을 μ„€μ •ν•˜μ—¬ μŠ€νƒ€μΌμ„ 전달
    fontSize: "14px",
    border: "1px solid black",
    textAlign: "center",
  }}
  interactiveStyles={{
    hoverColor: "white", // ν–‰ hover μ‹œ 배경색 μ„€μ •
    clickedColor: "black", // rowSelectionType이 μ„€μ •λ˜μ—ˆμœΌλ―€λ‘œ, clicekd Color μ„€μ •
  }}
  rowSelectionType="single"
  defaultSelectedRowIndex={0} // (rowSelectionType이 single일 λ•Œ) 0번째 ν–‰ κΈ°λ³Έ κ°’μœΌλ‘œ 선택
/>;

3) rowSelectionType이 "multiple"인 경우

<TableBody
  table={table}
  style={{
    // ν…Œμ΄λΈ” λ°”λ””μ˜ CSS 속성을 μ„€μ •ν•˜μ—¬ μŠ€νƒ€μΌμ„ 전달
    fontSize: "14px",
    border: "1px solid black",
    textAlign: "center",
  }}
  interactiveStyles={{
    hoverColor: "white", // ν–‰ hover μ‹œ 배경색 μ„€μ •
    clickedColor: "black", // rowSelectionType이 μ„€μ •λ˜μ—ˆμœΌλ―€λ‘œ, clicekd Color μ„€μ •
  }}
  rowSelectionType="multiple"
/>;


4) rowSelectionType이 "grouped"인 경우

<TableBody
  table={table}
  style={{
    // ν…Œμ΄λΈ” λ°”λ””μ˜ CSS 속성을 μ„€μ •ν•˜μ—¬ μŠ€νƒ€μΌμ„ 전달
    fontSize: "14px",
    border: "1px solid black",
    textAlign: "center",
  }}
  interactiveStyles={{
    hoverColor: "white", // ν–‰ hover μ‹œ 배경색 μ„€μ •
    clickedColor: "black", // rowSelectionType이 μ„€μ •λ˜μ—ˆμœΌλ―€λ‘œ, clicekd Color μ„€μ •
  }}
  rowSelectionType="grouped",
  groupSelectionRange={1} // rangeκ°€ 1μ΄λ―€λ‘œ, μ„ νƒν•œ ν–‰ κΈ°μ€€ μœ„/μ•„λž˜ 각 1κ°œμ”© 총 3개의 행이 선택됨
/>;

subRowProps의 ꡬ성은 μ•„λž˜μ™€ κ°™μŠ΅λ‹ˆλ‹€.

PropsTypeExplainRequired
expandStateArray<boolean>subRow ν™•μž₯κ³Ό κ΄€λ ¨λœ μƒνƒœμž…λ‹ˆλ‹€.optional
styleCSSPropertiesinline Style 을 톡해 CSS 속성을 μ„€μ •ν•  수 μžˆμŠ΅λ‹ˆλ‹€.optional
hoverColorstringsubRow에 마우슀λ₯Ό hover ν–ˆμ„ λ•Œ λ°œμƒν•˜λŠ” 배경색을 μ„€μ •ν•  수 μžˆμŠ΅λ‹ˆλ‹€.optional
import "rex-web-table/dist/index.css";

// useSubRowExpand 훅을 μ‚¬μš©ν•˜μ—¬ μ„œλΈŒ ν–‰μ˜ ν™•μž₯ μƒνƒœμ™€ κ΄€λ ¨λœ μƒνƒœμ™€ μƒνƒœ 관리 ν•¨μˆ˜λ₯Ό κ°€μ Έμ˜΅λ‹ˆλ‹€.
const { expandState, changeSubRowExpandState } = useSubRowExpand();

const handleClickRow = ({ rowIndex }: { rowIndex: number }) => {
  // rowIndexλ₯Ό μ‚¬μš©ν•΄ ν΄λ¦­ν•œ ν–‰μ˜ μƒνƒœλ₯Ό λ³€κ²½
  changeSubRowExpandState(rowIndex);
};

<TableProvider
  useParentRowUi={true}
  subRowContents={subRowContents}
  rowClickEvent={handleClickRow} // ν–‰ 클릭 μ‹œ μœ„μ—μ„œ μ •μ˜ν•œ ν•¨μˆ˜λ₯Ό 호좜
>
  <TableBody
    table={table}
    subRowProps={{
      expandState, // μ„œλΈŒ ν–‰μ˜ ν™•μž₯ μƒνƒœλ₯Ό 전달
      style: {
        backgroundColor: "ivory", // ν…Œμ΄λΈ”μ˜ μ„œλΈŒ 행에 μ μš©ν•  CSS 속성을 μ„€μ •
      },
      hoverColor: "red", // μ„œλΈŒ 행에 마우슀 hover μ‹œ 배경색을 μ„€μ •
    }}
  />
</TableProvider>;

3.4 TableFooter

  • νŽ˜μ΄μ§€λ„€μ΄μ…˜ κΈ°λŠ₯을 λ‹΄λ‹Ήν•˜λŠ” μ»΄ν¬λ„ŒνŠΈλ‘œ, ν•΄λ‹Ή κΈ°λŠ₯이 ν•„μš”ν•  경우 μ„ νƒμ μœΌλ‘œ ν™œμš© κ°€λŠ₯ν•©λ‹ˆλ‹€.
  • μ»΄ν¬λ„ŒνŠΈ 호좜 μ‹œ 전달해야 ν•˜λŠ” propsλŠ” μ•„λž˜μ™€ κ°™μŠ΅λ‹ˆλ‹€.
    PropsTypeExplainRequired
    paginationPaginationStateνŽ˜μ΄μ§€λ„€μ΄μ…˜ κ΄€λ ¨ μƒνƒœrequired
    setPaginationDispatch<SetStateAction<PaginationState>>νŽ˜μ΄μ§€λ„€μ΄μ…˜ μƒνƒœκ΄€λ¦¬ ν•¨μˆ˜required
    totalPageNumnumber전체 νŽ˜μ΄μ§€ 개수 κ΄€λ ¨ 데이터required
    pageSizeListArray<number>ν•œ νŽ˜μ΄μ§€ λ‹Ή ν‘œμ‹œν•  컨텐츠 개수 μ˜΅μ…˜ 리슀트optional
    styles{ containerStyle: CSSproperties; pageSizeSelectStyle: PageSelectStlyeProps; pageNumButtonStyle: PageButtonStyleProps; }TableFooter λ‚΄λΆ€ ꡬ성 μš”μ†Œμ— λŒ€ν•œ css μŠ€νƒ€μΌ μ„€μ •optional

  • style 의 각 κ΅¬μ„±μš”μ†ŒλŠ” μ•„λž˜μ™€ κ°™μŠ΅λ‹ˆλ‹€.

    • contianerStyle
      PropsTypeExplainRequired
      containerStyleCSSPropertiesμ»΄ν¬λ„ŒνŠΈλ₯Ό λ‹΄λŠ” container 의 μŠ€νƒ€μΌ μ„€μ •optional
    • pageSizeSelectStyle
      PropsTypeExplainRequired
      fontColorstringselect κΈ€μžμƒ‰ μ„€μ •optional
      backgroundColorstringselect 배경색 μ„€μ •optional
    • pageNumButtonStyle
      PropsTypeExplainRequired
      fontColorstringbutton κΈ€μžμƒ‰ μ„€μ •optional
      selectedNumColorstringν˜„μž¬ μ„ νƒλœ page num button κΈ€μžμƒ‰ μ„€μ •optional
      selectedNumBackgroundColorstringν˜„μž¬ μ„ νƒλœ page num button 배경색 μ„€μ •optional
      arrowButtonColorstringprev/next button 색상 μ„€μ •optional
      disabledArrowButtonColorstringprev/next button λΉ„ν™œμ„±ν™” μ‹œ (맨 μ•ž/λ’€ νŽ˜μ΄μ§€μΌ 경우) 색상 μ„€μ •optional

/**
 * useTable 훅을 μ‚¬μš©ν•˜μ—¬ ν…Œμ΄λΈ” κ΄€λ ¨ μƒνƒœμ™€ νŽ˜μ΄μ§€λ„€μ΄μ…˜ κ΄€λ ¨ 데이터λ₯Ό κ°€μ Έμ˜΅λ‹ˆλ‹€.
 * νŽ˜μ΄μ§€λ„€μ΄μ…˜ κΈ°λŠ₯을 ν™œμ„±ν™”ν•˜λ €λ©΄ `isPagination`을 true둜 μ„€μ •ν•΄μ•Ό ν•©λ‹ˆλ‹€.
 */
const { table, totalPageNum, pagination, setPagination } = useTable<Example>({
  data,
  columns,
  isPagination: true, // νŽ˜μ΄μ§€λ„€μ΄μ…˜ κΈ°λŠ₯ ν™œμ„±ν™”
});

/**
 * TableFooter μ»΄ν¬λ„ŒνŠΈλ₯Ό ν˜ΈμΆœν•˜μ—¬ νŽ˜μ΄μ§€λ„€μ΄μ…˜ κΈ°λŠ₯을 κ΅¬ν˜„ν•©λ‹ˆλ‹€.
 * ν•„μš”ν•œ νŽ˜μ΄μ§€λ„€μ΄μ…˜ μƒνƒœμ™€ κ΄€λ ¨λœ 섀정을 props둜 μ „λ‹¬ν•©λ‹ˆλ‹€.
 */
<TableFooter
  pagination={pagination} // ν˜„μž¬ νŽ˜μ΄μ§€λ„€μ΄μ…˜ μƒνƒœλ₯Ό 전달
  setPagination={setPagination} // νŽ˜μ΄μ§€λ„€μ΄μ…˜ μƒνƒœλ₯Ό κ΄€λ¦¬ν•˜λŠ” ν•¨μˆ˜ 전달
  totalPageNum={totalPageNum} // 전체 νŽ˜μ΄μ§€ 수λ₯Ό 전달
  styles={{
    containerStyle: {
      // TableFooter의 μ»¨ν…Œμ΄λ„ˆ μŠ€νƒ€μΌ μ„€μ •
      padding: "2px 3px",
      border: "1px solid darkgray",
      borderLeft: "none",
    },
    pageSizeSelectStyle: {
      // νŽ˜μ΄μ§€ μ‚¬μ΄μ¦ˆ μ„ νƒμ˜ μŠ€νƒ€μΌ μ„€μ •
      fontColor: "black",
    },
    pageNumButtonStyle: {
      // νŽ˜μ΄μ§€ 번호 λ²„νŠΌμ˜ μŠ€νƒ€μΌ μ„€μ •
      backgroundColor: "transparent",
      disabledArrowButtonColor: "darkgray",
    },
  }}
/>;

3.5 useTable

  • TableHeader, TableBody, TableFooter μ»΄ν¬λ„ŒνŠΈμ˜ props둜 전달할 데이터λ₯Ό λ°˜ν™˜ν•˜λŠ” μ»€μŠ€ν…€ ν›…μž…λ‹ˆλ‹€.
  • ν›… 호좜 μ‹œ 전달해야 ν•˜λŠ” propsλŠ” μ•„λž˜μ™€ κ°™μŠ΅λ‹ˆλ‹€.
    PropsTypeExplainRequired
    dataArray<T>ν…Œμ΄λΈ” body λ₯Ό κ΅¬μ„±ν•˜λŠ” λ°μ΄ν„°μž…λ‹ˆλ‹€.required
    columnsArray<ColumnDef<T>>ν…Œμ΄λΈ” column 섀정에 ν™œμš©λ˜λŠ” λ°μ΄ν„°μž…λ‹ˆλ‹€.required
    isPaginationbooleanνŽ˜μ΄μ§€λ„€μ΄μ…˜ μ„€μ • μ—¬λΆ€λ₯Ό κ²°μ •ν•˜λŠ” λ°μ΄ν„°μž…λ‹ˆλ‹€.optional

  • 훅이 λ°˜ν™˜ν•˜λŠ” 값은 μ•„λž˜μ™€ κ°™μŠ΅λ‹ˆλ‹€.
    Returned ValueTypeExplain
    tableTable<TData>ν…Œμ΄λΈ” 섀정에 ν™œμš©λ˜λŠ” μΈμŠ€ν„΄μŠ€ 객체. TableHeader, TableBody의 props둜 ν™œμš©λ©λ‹ˆλ‹€.
    paginationPaginationStateνŽ˜μ΄μ§€λ„€μ΄μ…˜ κ΄€λ ¨ μƒνƒœ. TableFooter의 props둜 ν™œμš©λ©λ‹ˆλ‹€.
    setPaginationDispatch<SetStateAction<PaginationState>>νŽ˜μ΄μ§€λ„€μ΄μ…˜ κ΄€λ ¨ μƒνƒœκ΄€λ¦¬ ν•¨μˆ˜. TableFooter의 props둜 ν™œμš©λ©λ‹ˆλ‹€.
    totalPageNumnumber전체 νŽ˜μ΄μ§€ 개수λ₯Ό μ˜λ―Έν•©λ‹ˆλ‹€. TableFooter의 props둜 ν™œμš©λ©λ‹ˆλ‹€.

/**
 * ν…Œμ΄λΈ”μ— ν‘œμ‹œν•  데이터와 컬럼 μ •μ˜
 * 이 λ°μ΄ν„°λŠ” ν…Œμ΄λΈ”μ˜ 본문을 κ΅¬μ„±ν•©λ‹ˆλ‹€.
 */
const data = [
  { id: 1, name: "kim", age: 28 },
  { id: 2, name: "lee", age: 22 },
];

/**
 * ν…Œμ΄λΈ”μ˜ 각 μ»¬λŸΌμ„ μ •μ˜ν•©λ‹ˆλ‹€.
 * ColumnDef νƒ€μž…μ„ μ‚¬μš©ν•˜μ—¬ 각 컬럼의 킀와 속성을 μ„€μ •ν•©λ‹ˆλ‹€.
 */
const columns: ColumnDef<{ id: number; name: string; age: number }>[] = [
  { accessorKey: "id", header: "ID" },
  { accessorKey: "name", header: "이름" },

  // **μ…€ μ»€μŠ€ν„°λ§ˆμ΄μ§•**
  // λ§Œμ•½ 셀에 μ»€μŠ€ν…€ μ»΄ν¬λ„ŒνŠΈλ₯Ό μ‚¬μš©ν•˜κ³  μ‹Άλ‹€λ©΄,
  // cell ν”„λ‘œνΌν‹°μ— ν•¨μˆ˜λ₯Ό μ „λ‹¬ν•˜μ—¬ μ›ν•˜λŠ” 값을 λ°˜ν™˜ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
  // μ΄λ•Œ, .getValue() λ©”μ„œλ“œλ₯Ό μ‚¬μš©ν•΄ ν˜„μž¬ ν–‰μ˜ 데이터λ₯Ό μ‰½κ²Œ κ°€μ Έμ˜¬ 수 μžˆμŠ΅λ‹ˆλ‹€.
  {
    accessorKey: "age",
    header: "λ‚˜μ΄",
    cell: ({ getValue }) => {
      const age = getValue(); // ν˜„μž¬ ν–‰μ˜ λ‚˜μ΄ 값을 κ°€μ Έμ˜΅λ‹ˆλ‹€.
      return <span>{age}μ„Έ</span>; // λ‚˜μ΄ 값을 μ»€μŠ€ν…€ ν˜•μ‹μœΌλ‘œ λ°˜ν™˜ν•©λ‹ˆλ‹€.
    },
  },
];

/**
 * useTable 훅을 ν˜ΈμΆœν•˜μ—¬ ν…Œμ΄λΈ”κ³Ό νŽ˜μ΄μ§€λ„€μ΄μ…˜ κ΄€λ ¨ μƒνƒœλ₯Ό κ°€μ Έμ˜΅λ‹ˆλ‹€.
 * 데이터와 μ»¬λŸΌμ„ props둜 μ „λ‹¬ν•©λ‹ˆλ‹€.
 */
const { table, totalPageNum, pagination, setPagination } = useTable<{
  id: number;
  name: string;
  age: number;
}>({
  data, // ν…Œμ΄λΈ”μ˜ λ³Έλ¬Έ 데이터
  columns, // ν…Œμ΄λΈ”μ˜ 컬럼 μ„€μ •
  isPagination: true, // νŽ˜μ΄μ§€λ„€μ΄μ…˜ κΈ°λŠ₯ ν™œμ„±ν™”
});

/**
 * ν…Œμ΄λΈ”μ„ κ΅¬μ„±ν•˜λŠ” μ»΄ν¬λ„ŒνŠΈλ₯Ό ν˜ΈμΆœν•©λ‹ˆλ‹€.
 * 각 μ»΄ν¬λ„ŒνŠΈλŠ” useTable ν›…μ—μ„œ λ°˜ν™˜λœ 값을 props둜 μ „λ‹¬λ°›μŠ΅λ‹ˆλ‹€.
 */
return (
  <TableProvider>
    <TableHeader table={table} /> {/* ν…Œμ΄λΈ”μ˜ 헀더λ₯Ό λ Œλ”λ§ */}
    <TableBody table={table} /> {/* ν…Œμ΄λΈ”μ˜ 본문을 λ Œλ”λ§ */}
    <TableFooter
      pagination={pagination} // ν˜„μž¬ νŽ˜μ΄μ§€λ„€μ΄μ…˜ μƒνƒœ 전달
      setPagination={setPagination} // νŽ˜μ΄μ§€λ„€μ΄μ…˜ μƒνƒœλ₯Ό κ΄€λ¦¬ν•˜λŠ” ν•¨μˆ˜ 전달
      totalPageNum={totalPageNum} // 전체 νŽ˜μ΄μ§€ 수 전달
    />
  </TableProvider>
);

3.6 useSubRowContents

  • TableProvider의 subRowContents에 전달할 μƒνƒœμ™€ μƒνƒœ 관리 ν•¨μˆ˜λ₯Ό λ°˜ν™˜ν•˜λŠ” μ»€μŠ€ν…€ ν›…μž…λ‹ˆλ‹€.
  • 훅이 λ°˜ν™˜ν•˜λŠ” 값은 μ•„λž˜μ™€ κ°™μŠ΅λ‹ˆλ‹€.
    Returned ValueTypeExplain
    subRowContentsArray<object[]>TableProvider의 subRowContents둜 ν™œμš©λ˜λŠ” μƒνƒœ
    setSubRowContentsDispatch<SetStateAction<Array<object[]>>>subRowContents μƒνƒœκ΄€λ¦¬ ν•¨μˆ˜

/**
 * μ„œλΈŒ ν–‰μ—μ„œ μ‚¬μš©ν•  데이터λ₯Ό μ •μ˜ν•©λ‹ˆλ‹€.
 * 각 μΈλ±μŠ€λŠ” 각 λΆ€λͺ¨ 행에 λŒ€μ‘ν•˜λŠ” μ„œλΈŒ ν–‰μ˜ 데이터λ₯Ό λ‚˜νƒ€λƒ…λ‹ˆλ‹€.
 */
const subRowData: object[][] = [
  [
    { no: 1, name: "lee" }, // 첫 번째 μ„œλΈŒ ν–‰μ˜ 첫 번째 ν•­λͺ©
    { no: 2, name: "kim" }, // 첫 번째 μ„œλΈŒ ν–‰μ˜ 두 번째 ν•­λͺ©
  ],
  [
    { no: 1, name: "park" }, // 두 번째 μ„œλΈŒ ν–‰μ˜ 첫 번째 ν•­λͺ©
    { no: 2, name: "choi" }, // 두 번째 μ„œλΈŒ ν–‰μ˜ 두 번째 ν•­λͺ©
  ],
];

/**
 * useSubRowContents 훅을 ν˜ΈμΆœν•˜μ—¬ μ΄ˆκΈ°κ°’μœΌλ‘œ subRowDataλ₯Ό μ „λ‹¬ν•˜κ³ 
 * μ„œλΈŒ ν–‰μ—μ„œ μ‚¬μš©ν•  μƒνƒœμ™€ μƒνƒœ 관리 ν•¨μˆ˜λ₯Ό κ°€μ Έμ˜΅λ‹ˆλ‹€.
 * μ΄ˆκΈ°κ°’μ€ μ„ νƒμ μœΌλ‘œ 전달 κ°€λŠ₯ν•˜λ©°, μ „λ‹¬ν•˜μ§€ μ•Šμ„ 경우 빈 배열이 초기 κ°’μœΌλ‘œ μ„€μ •λ©λ‹ˆλ‹€.
 */
const { subRowContents, setSubRowContents } = useSubRowContents(subRowData);

/**
 * TableProviderλ₯Ό μ‚¬μš©ν•˜μ—¬ ν…Œμ΄λΈ”μ„ κ΅¬μ„±ν•©λ‹ˆλ‹€.
 * useParentRowUiκ°€ true일 경우, λΆ€λͺ¨ ν–‰μ˜ UIλ₯Ό μ„œλΈŒ ν–‰μ—μ„œ μƒμ†λ°›μŠ΅λ‹ˆλ‹€.
 * subRowContentsλ₯Ό μ„œλΈŒ ν–‰ λ°μ΄ν„°λ‘œ μ „λ‹¬ν•˜μ—¬ ν™œμš©ν•©λ‹ˆλ‹€.
 */
return (
  <TableProvider useParentRowUi={true} subRowContents={subRowContents}>
    <TableHeader table={table} />
    <TableBody table={table} />
  </TableProvider>
);

3.7 useSubRowExpand

  • TableBody의 expandState에 전달할 μƒνƒœμ™€ μƒνƒœ 관리 ν•¨μˆ˜λ₯Ό λ°˜ν™˜ν•˜λŠ” μ»€μŠ€ν…€ ν›…μž…λ‹ˆλ‹€.
  • 훅이 λ°˜ν™˜ν•˜λŠ” 값은 μ•„λž˜μ™€ κ°™μŠ΅λ‹ˆλ‹€.
    Returned ValueTypeExplain
    expandStateArray<boolean>TableBody의 expandState μƒνƒœ
    setExpandStateDispatch<SetStateAction<boolean[]>>expandState μƒνƒœκ΄€λ¦¬ ν•¨μˆ˜
    changeSubRowExpandStatefunctionν΄λ¦­ν•œ ν–‰μ˜ expandStateλ₯Ό λ³€κ²½ν•˜λŠ” ν•¨μˆ˜

/**
 * μ„œλΈŒ ν–‰μ˜ ν™•μž₯ μƒνƒœλ₯Ό κ΄€λ¦¬ν•©λ‹ˆλ‹€.
 * ν΄λ¦­ν•œ ν–‰μ˜ ν™•μž₯ μƒνƒœλ₯Ό λ³€κ²½ν•˜λŠ” ν•¨μˆ˜μ™€ ν˜„μž¬μ˜ ν™•μž₯ μƒνƒœλ₯Ό λ°˜ν™˜ν•©λ‹ˆλ‹€.
 */
const { expandState, changeSubRowExpandState } = useSubRowExpand();

/**
 * ν…Œμ΄λΈ”μ˜ νŠΉμ • 행이 ν΄λ¦­λ˜μ—ˆμ„ λ•Œ ν˜ΈμΆœλ˜λŠ” ν•Έλ“€λŸ¬ ν•¨μˆ˜μž…λ‹ˆλ‹€.
 * 클릭된 ν–‰μ˜ 인덱슀λ₯Ό λ°›μ•„ ν•΄λ‹Ή ν–‰μ˜ ν™•μž₯ μƒνƒœλ₯Ό λ³€κ²½ν•©λ‹ˆλ‹€.
 * 이 ν•¨μˆ˜λŠ” μ‚¬μš©μžκ°€ 직접 μ •μ˜ν•˜μ—¬ ν™œμš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
 */
const handleRowClick = ({ rowIndex }: { rowIndex: number }) => {
  changeSubRowExpandState(rowIndex);
};

/**
 * TableProviderλ₯Ό μ‚¬μš©ν•˜μ—¬ ν…Œμ΄λΈ”μ„ κ΅¬μ„±ν•©λ‹ˆλ‹€.
 * subRowContents와 ν•¨κ»˜ μ„œλΈŒ ν–‰μ˜ ν™•μž₯ μƒνƒœλ₯Ό κ΄€λ¦¬ν•©λ‹ˆλ‹€.
 * rowClickEvent에 ν•Έλ“€λŸ¬λ₯Ό μ „λ‹¬ν•˜μ—¬ 클릭 μ‹œ ν™•μž₯ μƒνƒœλ₯Ό λ³€κ²½ν•˜λ„λ‘ μ„€μ •ν•©λ‹ˆλ‹€.
 */
return (
  <TableProvider
    useParentRowUi={true} // λΆ€λͺ¨ ν–‰μ˜ UIλ₯Ό μ„œλΈŒ ν–‰μ—μ„œ 상속받도둝 μ„€μ •
    subRowContents={subRowContents} // μ„œλΈŒ ν–‰μ—μ„œ μ‚¬μš©ν•  데이터λ₯Ό 전달
    rowClickEvent={handleRowClick}
  >
    <TableBody
      table={table}
      subRowProps={{
        expandState, // μ„œλΈŒ ν–‰μ˜ ν™•μž₯ μƒνƒœ
      }}
    />
  </TableProvider>
);

3.8 getClickedRowContent, getClickedCellContent

  • μ‚¬μš©μžκ°€ ν΄λ¦­ν•œ ν–‰ 및 μ…€μ˜ μ½˜ν…μΈ λ₯Ό κ°€μ Έμ˜€λŠ” μœ ν‹Έλ¦¬ν‹° ν•¨μˆ˜μž…λ‹ˆλ‹€.
  • μ‚¬μš© μ˜ˆμ‹œλŠ” μ•„λž˜μ™€ κ°™μŠ΅λ‹ˆλ‹€. (클릭 μ΄λ²€νŠΈμ— μ „λ‹¬ν•˜μ—¬ μ‚¬μš©ν•˜λŠ” μ˜ˆμ‹œ)
/**
 * 클릭 이벀트 ν•Έλ“€λŸ¬μ—μ„œ 클릭된 ν–‰μ˜ μ½˜ν…μΈ λ₯Ό κ°€μ Έμ˜€λŠ” μ˜ˆμ‹œμž…λ‹ˆλ‹€.
 * ν•„μš”ν•œ 경우, 클릭된 ν–‰μ˜ 데이터λ₯Ό ν™œμš©ν•˜μ—¬ μΆ”κ°€ μž‘μ—…μ„ μˆ˜ν–‰ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
 */
const handleClickRow = () => {
  const rowContent = getClickedRowContent(); // 클릭된 ν–‰μ˜ μ½˜ν…μΈ  κ°€μ Έμ˜€κΈ°
  console.log("클릭된 ν–‰μ˜ 데이터:", rowContent);
};

/**
 * 클릭 이벀트 ν•Έλ“€λŸ¬μ—μ„œ 클릭된 μ…€μ˜ μ½˜ν…μΈ λ₯Ό κ°€μ Έμ˜€λŠ” μ˜ˆμ‹œμž…λ‹ˆλ‹€.
 * ν•„μš”μ— 따라 클릭된 μ…€μ˜ 데이터λ₯Ό ν™œμš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
 */
const handleClickCell = () => {
  const cellContent = getClickedCellContent(); // 클릭된 μ…€μ˜ μ½˜ν…μΈ  κ°€μ Έμ˜€κΈ°
  console.log("클릭된 μ…€μ˜ 데이터:", cellContent);
};

return (
  <TableProvider
    rowClickEvent={handleClickRow} // ν–‰ 클릭 이벀트 ν•Έλ“€λŸ¬λ₯Ό μ „λ‹¬ν•©λ‹ˆλ‹€.
    cellClickEvent={handleClickCell} // μ…€ 클릭 이벀트 ν•Έλ“€λŸ¬λ₯Ό μ „λ‹¬ν•©λ‹ˆλ‹€.
  >
    <TableHeader table={table} />
    <TableBody table={table} />
  </TableProvider>
);

4. Issue

  • ν˜„μž¬ sorting κΈ°λŠ₯이 λ―Έκ΅¬ν˜„ 된 μƒνƒœλ‘œ μΆ”ν›„ κΈ°λŠ₯ 보완이 ν•„μš”ν•œ μƒν™©μž…λ‹ˆλ‹€.

FAQs

Package last updated on 09 May 2025

Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts