reactjsreact-table

How to Implement react-table without typescript?


How can I re-implement react-table (version 8) without using TypeScript? I want to add some tables to the React project using react-table. When I looked at the documentation (v8), I saw that all examples are implemented with TypeScript.


Solution

  • According to the official rep of react-table v8 it is Full rewrite to TypeScript . but you can implement this latest version of react-table without TypeScript , just convert your code from typescript to javascript

    Example : this Is a basic react table written in the documentation of react table with TypeScript and converted to javascript :

    Index.js :

    import * as React from 'react'
    import ReactDOM from "react-dom";
    
    import './index.css'
    
    import {
      createColumnHelper,
      flexRender,
      getCoreRowModel,
      useReactTable,
    } from '@tanstack/react-table'
    
    
    
    const defaultData  = [
      {
        firstName: 'tanner',
        lastName: 'linsley',
        age: 24,
        visits: 100,
        status: 'In Relationship',
        progress: 50,
      },
      {
        firstName: 'tandy',
        lastName: 'miller',
        age: 40,
        visits: 40,
        status: 'Single',
        progress: 80,
      },
      {
        firstName: 'joe',
        lastName: 'dirte',
        age: 45,
        visits: 20,
        status: 'Complicated',
        progress: 10,
      },
    ]
    
    const columnHelper = createColumnHelper()
    
    const columns = [
      columnHelper.accessor('firstName', {
        cell: info => info.getValue(),
        footer: info => info.column.id,
      }),
      columnHelper.accessor(row => row.lastName, {
        id: 'lastName',
        cell: info => <i>{info.getValue()}</i>,
        header: () => <span>Last Name</span>,
        footer: info => info.column.id,
      }),
      columnHelper.accessor('age', {
        header: () => 'Age',
        cell: info => info.renderValue(),
        footer: info => info.column.id,
      }),
      columnHelper.accessor('visits', {
        header: () => <span>Visits</span>,
        footer: info => info.column.id,
      }),
      columnHelper.accessor('status', {
        header: 'Status',
        footer: info => info.column.id,
      }),
      columnHelper.accessor('progress', {
        header: 'Profile Progress',
        footer: info => info.column.id,
      }),
    ]
    
    function App() {
      const [data, setData] = React.useState(() => [...defaultData])
      const rerender = React.useReducer(() => ({}), {})[1]
    
      const table = useReactTable({
        data,
        columns,
        getCoreRowModel: getCoreRowModel(),
      })
    
      return (
        <div className="p-2">
          <table>
            <thead>
              {table.getHeaderGroups().map(headerGroup => (
                <tr key={headerGroup.id}>
                  {headerGroup.headers.map(header => (
                    <th key={header.id}>
                      {header.isPlaceholder
                        ? null
                        : flexRender(
                            header.column.columnDef.header,
                            header.getContext()
                          )}
                    </th>
                  ))}
                </tr>
              ))}
            </thead>
            <tbody>
              {table.getRowModel().rows.map(row => (
                <tr key={row.id}>
                  {row.getVisibleCells().map(cell => (
                    <td key={cell.id}>
                      {flexRender(cell.column.columnDef.cell, cell.getContext())}
                    </td>
                  ))}
                </tr>
              ))}
            </tbody>
            <tfoot>
              {table.getFooterGroups().map(footerGroup => (
                <tr key={footerGroup.id}>
                  {footerGroup.headers.map(header => (
                    <th key={header.id}>
                      {header.isPlaceholder
                        ? null
                        : flexRender(
                            header.column.columnDef.footer,
                            header.getContext()
                          )}
                    </th>
                  ))}
                </tr>
              ))}
            </tfoot>
          </table>
          <div className="h-4" />
          <button onClick={() => rerender()} className="border p-2">
            Rerender
          </button>
        </div>
      )
    }
    
    
    ReactDOM.render(
      
        <App/>
    ,
      document.getElementById("root")
    );