【问题标题】:React js material ui core table get data from row on clickReact js材料ui核心表点击从行获取数据
【发布时间】:2021-11-05 20:59:06
【问题描述】:

我找到了一个材料表的代码,它接受一个列表作为输入并对其应用分页、排序和过滤。问题是我需要找到一种方法从 onClick 行中提取数据并将页面与这些数据一起重定向到新路由。我该怎么做?

在组件中,我将表格调用如下:

export default function ViewAllUsers() {
     const [filterFn, setFilterFn] = useState({ fn: items => { return items; } })
     const records = ....//List of records
     const {
        TblContainer,
        TblHead,
        TblPagination,
        recordsAfterPagingAndSorting
    } = useTable(records, headCells, filterFn);

    const handleSearch = e => {
        let target = e.target;
        //Handle search
    }

return (
        <>
            <Paper className={classes.pageContent}>
                <Toolbar>
                    <Controls.Input onChange={handleSearch}/>
                </Toolbar>
                <TblContainer>
                    <TblHead />
                    <TableBody>
                        {
                            recordsAfterPagingAndSorting().map(item =>
                            (<TableRow key={item.id}>
                                <TableCell>{item.id}</TableCell>
                                <TableCell>{item.fullName}</TableCell>
                            </TableRow>)
                            )
                        }
                    </TableBody>
                </TblContainer>
                <TblPagination/>
            </Paper>
}

而 useTable 钩子是:

export default function useTable(records, headCells, filterFn) {
    const pages = [5, 10, 25]
    const [page, setPage] = useState(0)
    const [rowsPerPage, setRowsPerPage] = useState(pages[page])
    const [order, setOrder] = useState()
    const [orderBy, setOrderBy] = useState()

   const TblContainer = props => (
        <Table className={classes.table}>
            {props.children}
        </Table>
    )
    const TblHead = props => {

        const handleSortRequest = cellId => {
           //Some code
        }

        return (<TableHead>
            <TableRow>
                {
                    headCells.map(headCell => (
                        <TableCell key={headCell.id}
                            sortDirection={orderBy === headCell.id ? order : false}>
                            {headCell.disableSorting ? headCell.label :
                                <TableSortLabel
                                    active={orderBy === headCell.id}
                                    direction={orderBy === headCell.id ? order : 'asc'}
                                    onClick={() => { handleSortRequest(headCell.id) }}>
                                    {headCell.label}
                                </TableSortLabel>
                            }
                        </TableCell>))
                }
            </TableRow>
        </TableHead>)
    }

    const TblPagination = () => (
        <TablePagination
            component="div"
            page={page}
            rowsPerPageOptions={pages}
            rowsPerPage={rowsPerPage}
            count={records.length}
            onChangePage={handleChangePage}
            onChangeRowsPerPage={handleChangeRowsPerPage}
            id="TablePagination"
        />
    )

    return {
        TblContainer,
        TblHead,
        TblPagination,
        recordsAfterPagingAndSorting
    }
}

【问题讨论】:

    标签: html reactjs material-ui material-design


    【解决方案1】:

    您可以简单地使用 onClick 处理程序通过它传递项目数据:

    export default function ViewAllUsers() {
         const [filterFn, setFilterFn] = useState({ fn: items => { return items; } })
         const records = ....//List of records
         const {
            TblContainer,
            TblHead,
            TblPagination,
            recordsAfterPagingAndSorting
        } = useTable(records, headCells, filterFn);
    
        const handleSearch = e => {
            let target = e.target;
            //Handle search
        }
    
        const handleItemClick = item => {
            //Redirect to new route from here with the item data
        }
    
    
        return (
            <>
                <Paper className={classes.pageContent}>
                    <Toolbar>
                        <Controls.Input onChange={handleSearch}/>
                    </Toolbar>
                    <TblContainer>
                        <TblHead />
                        <TableBody>
                            {
                                recordsAfterPagingAndSorting().map(item =>
                                (<TableRow key={item.id} onClick={() => handleItemClick(item)}>
                                    <TableCell>{item.id}</TableCell>
                                    <TableCell>{item.fullName}</TableCell>
                                </TableRow>)
                                )
                            }
                        </TableBody>
                    </TblContainer>
                    <TblPagination/>
                </Paper>
             </>
          )
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-09-19
      • 1970-01-01
      • 2021-06-22
      • 2019-07-12
      • 1970-01-01
      • 2019-01-03
      • 2021-07-16
      相关资源
      最近更新 更多