【问题标题】:React Router - TypeError: Cannot read property 'toUpperCase' of undefinedReact Router - TypeError:无法读取未定义的属性“toUpperCase”
【发布时间】:2015-09-23 09:31:36
【问题描述】:

在使用 React 时偶然发现了这个问题。我似乎找不到解决方案。堆栈跟踪没有太大帮助,因为脚本与 webpack 捆绑在一起。

这是我从控制台得到的结果

[HMR] Waiting for update signal from WDS...
Warning: React.createElement: type should not be null or undefined. It should be a string (for DOM elements) or a ReactClass (for composite components).
Warning: React.createElement: type should not be null or undefined. It should be a string (for DOM elements) or a ReactClass (for composite components).
Warning: Only functions or strings can be mounted as React components.
Uncaught TypeError: Cannot read property 'toUpperCase' of undefined
[WDS] Hot Module Replacement enabled.

在尝试渲染此 App 组件时遇到

import React from 'react'
import { Router, Route, IndexRoute } from 'react-router'
import { TableRequest, TableEngineer } from './tables.jsx'
import createBrowserHistory from 'history/lib/createBrowserHistory'
export class App extends React.Component {
    render() {
        return (
            <Router history={createBrowserHistory()}>
                <Route path="/" component={Index}>
                    <IndexRoute component={Home} />
                    <Route path="indeks-permohonan" component={TableRequest} />
                    <Route path="indeks-work-order" component={TableEngineer} />
                    <Route path="*" component={NotFound} />
                </Route>
            </Router>
            )
    }
}

包装清单

├── babel-core@5.8.25
├── babel-loader@5.3.2
├── file-loader@0.8.4
├── history@1.10.1
├── lodash@3.10.1
├── path@0.12.7
├── react@0.13.3
├── react-bootstrap@0.25.2
├── react-hot-loader@1.3.0
├── react-router@1.0.0-rc1
├── react-router-bootstrap@0.19.0
├── reactable@0.11.4
├── webpack@1.12.2
└── webpack-dev-server@1.11.0

【问题讨论】:

  • 您没有导入NotFound 组件。
  • 对不起,我没有发布完整的脚本,应该添加一个说明,说明这些组件在同一个文件中。

标签: reactjs react-router


【解决方案1】:

这只是意味着String 是undefined 并且代码正在对未定义的此类字符串调用toUpperCase()。你必须弄清楚那段代码在你的文件中的位置。您可以在对此类字符串调用 toUpperCase() 之前简单地添加一个未定义的检查。

【讨论】:

  • 它指向react 库。但在我的情况下,只有当我尝试从另一个库(react-router)渲染 Router 和 Route 组件时才会发生这种情况。
【解决方案2】:

尝试将react-router 更新到 v1.0。使用 v0.13 时会出现该错误。

npm 安装该版本,因为还没有稳定的 1.0 版本。您必须手动将 ^1.0.0-rc1 添加到您的 package.json。

【讨论】:

  • 是的,我确实使用了1.0.0-rc1 版本。
【解决方案3】:

您需要导入Index、Home 和NotFound 组件。

【讨论】:

  • 抱歉,我忽略了它们,我应该写到它们在同一个文件中。
  • 您是否检查过所有组件都已导出?如果我忘记做module.exports = Component;,我有时会看到这个
猜你喜欢
  • 2015-09-08
  • 1970-01-01
  • 2020-08-27
  • 1970-01-01
  • 2018-05-13
  • 1970-01-01
  • 2021-12-08
  • 2021-11-24
  • 2015-12-31
相关资源
最近更新 更多