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

Why does my react table say that columns are undefined?

我正在尝试使用 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);
        });
    }
}
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;

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

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

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

更改自:

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

对此:

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

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


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

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

我猜你的列应该是一个数组对象,但它不是 moment.Then 中的数组。map 函数抛出错误。你最好去 console.log({columns}) 看看里面有什么。

您没有将 columns 传给 useTable(options)。改为这样做

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