开发者问题收集

为什么 react-table 会出现错误“react 未定义”

2020-05-12
1734

我尝试将 react-table 集成到我的应用程序中,但在 import { useTable } from 'react-table' 行上出现错误。

TypeError: React 未定义

错误发生在 react-table.development.js 中的 var safeUseLayoutEffect = typeof document !== 'undefined' ? React.useLayoutEffect : React.useEffect; 行上。

为什么 react 本身未定义?


import React from 'react'
import ReactDOM from 'react-dom'
import PropTypes from 'prop-types'

import { useTable } from 'react-table'


export default class Taxonomies extends React.Component {

    taxonomyRows = () => {
        return data = React.useMemo(
            () => [
            {
                full_code: '1',
                level1: 'a',
                level2: 'b',
                level3: 'c',
                level4: 'd'
            },
            {
                full_code: '2',
                level1: 'e',
                level2: 'f',
                level3: 'g',
                level4: 'h'
            },
            {
                full_code: '3',
                level1: 'i',
                level2: 'j',
                level3: 'k',
                level4: 'l'
            },
            ],
            []
        )
    }

    taxonomyColumns = () => {
        return columns = React.useMemo(
          () => [
            {
              Header: 'Full Code',
              accessor: 'full_code',
            },
            {
              Header: 'Level 1',
              accessor: 'level1',
            },
            {
              Header: 'Level 2',
              accessor: 'level2',
            },
            {
              Header: 'Level 3',
              accessor: 'level3',
            },
            {
              Header: 'Level 4',
              accessor: 'level4',
            },
          ],
          []
        )
    }


    render = () => {
        const columns = this.taxonomyColumns()
        const data = this.taxonomyRows()
        const {
            getTableProps,
            getTableBodyProps,
            headerGroups,
            rows,
            prepareRow,
        } = useTable({ columns, data })

        return (
            <div> x</div>
        )
    }
}

2个回答

我按照 https://github.com/tannerlinsley/react-table/discussions/2048

config/webpack/environment.js

const nodeModulesLoader = environment.loaders.get('nodeModules');
if (!Array.isArray(nodeModulesLoader.exclude)) {
  nodeModulesLoader.exclude = nodeModulesLoader.exclude == null ? [] : [nodeModulesLoader.exclude];
}

nodeModulesLoader.exclude.push(/react-table/);

如果我理解正确的话,这个问题在某种程度上是由于 webpacker 转译 react-table 造成的,我们通过将其从转译中排除来解决它。

Firefox 最初给了我一个“React 未定义”的错误,但在 Chrome 中查看页面时,我看到的却是“无法读取未定义的属性‘useLayoutEffect’”

Wonerol
2020-10-20

该问题与 React 无关,但您在基于类的组件中使用了钩子。其中 useTableReact. useMemo 是钩子。

相反,请将基于类的组件转换为功能组件。

const Taxonomies = () => {

    ....
    ....

    return(
       <div>rendering</div>
    )
}

export default Taxonomies;
jogesh_pi
2020-05-12