为什么我的反应表说列未定义?

gib*_*b65 3 error-handling undefined reactjs react-table react-table-v7

我正在尝试使用 react-table 并且它抛出了一个错误。当我运行它时,它会在屏幕上显示以下堆栈跟踪:

在此处输入图片说明

它似乎试图从列创建映射,但由于列未定义而引发错误。

我正在传递我的专栏,但也许我做得不正确。

这是我的代码:

class Blog extends Component {
...
    createTable() {
        return this.state.blogPosts.length ? <Table posts={this.state.blogPosts} /> : null;
    }
...
    componentDidMount() {
...     
        axios.get('/blogs').then(response => {
            if (response.data) {
                const entries = Object.entries(response.data);
                this.setState({blogPosts: entries.map(p => Object.assign({id: p[0]}, {...p[1]}))
                    .sort((p1, p2) => p1.updatedAt > p2.updatedAt ? -1 : 1)});
            }
        }, err => {
            console.log('err=', err);
        });
    }
}
Run Code Online (Sandbox Code Playgroud)
import React from 'react';
import {
    useTable,
    useGroupBy,
    useFilters,
    useSortBy,
    useExpanded,
    usePagination
} from 'react-table';

function Table(props) {
    const cols = React.useMemo(() => [
        {
            Header: 'title',
            accessor: 'titleCol'
        },
        {
            Header: 'body',
            accessor: 'bodyCol'
        },
        {
            Header: 'last updated',
            accessor: 'updatedAtCol'
        }
    ], []);

    const dataArray = [];

    for (var index = 0; index < props.posts.length; index++) {
        const post = props.posts[index];
        dataArray.push({
            titleCol: post.title,
            bodyCol: post.body,
            updatedAtCol: post.updatedAt
        });
    }

    const data = React.useMemo(() => dataArray, []);

    const {
        getTableProps,
        getTableBodyProps,
        headerGroups,
        rows,
        prepareRow,
    } = useTable({ cols, data });

    return (
        <table {...getTableProps()}>
            <thead>
                {
                    headerGroups.map(headerGroup => (
                        <tr {...headerGroup.getHeaderGroupProps()}>
                            {headerGroup.headers.map(col => (
                                <th {...col.getHeaderProps()}>{col.render('Header')}</th>
                            ))}
                        </tr>
                    ))
                }
            </thead>
            <tbody {...getTableBodyProps()}>
                {
                    rows.map(row => {
                        prepareRow(row)
                        return (
                            <tr {...row.getRowProps()}>
                                {
                                    row.cells.map(cell => {
                                        return <td {...cell.getCellProps()}>{cell.render('Cell')}</td>
                                    })
                                }
                            </tr>
                        )
                    })
                }
            </tbody>
        </table>
    );
};

export default Table;
Run Code Online (Sandbox Code Playgroud)

我正在这里的 react-table 快速入门指南中跟进:https : //github.com/tannerlinsley/react-table/blob/master/docs/quickstart.md

谁能看到我做错了什么?谢谢。

Har*_*rni 5

您发送到 useTable 的 props 必须是columns,而不是cols

更改自:

const {
        getTableProps,
        getTableBodyProps,
        headerGroups,
        rows,
        prepareRow,
    } = useTable({ cols, data });
Run Code Online (Sandbox Code Playgroud)

对此:

const {
            getTableProps,
            getTableBodyProps,
            headerGroups,
            rows,
            prepareRow,
        } = useTable({ columns, data });
Run Code Online (Sandbox Code Playgroud)

这应该可以解决问题。由于我们可以向表选项发送许多道具,因此命名术语必须相同


我尝试了你的代码,但遇到了同样的错误,如你所见:

在此输入图像描述

如果这不起作用,请告诉我,快乐编码:)


Low*_*key 5

你没有传递columnsuseTable(options)。改为这样做

const {
   getTableProps,
   getTableBodyProps,
   headerGroups,
   rows,
   prepareRow,
} = useTable({ columns: cols, data }); 
Run Code Online (Sandbox Code Playgroud)