我是Reactjs的新手。我尝试将React Router添加到我的应用程序中,现在出现错误:
TypeError:_react.PropTypes未定义 ./node_modules/react-router/lib/PropTypes.js C:/react/myapplcation/node_modules/react-router/lib/PropTypes.js:8
我已安装
npm install --save react-router
我的index.js
代码:
import React from 'react';
import ReactDOM from 'react-dom';
import {Router, browserHistory} from 'react-router';
//import App from './Components/App';
import routes from './routes';
//ReactDOM.render(<App />, document.getElementById('root'));
ReactDOM.render(
<Router history={browserHistory} routes={routes} />
, document.getElementById('root'));
添加新的route.js
文件
import React from 'react';
import {Route, IndexRoute} from 'react-router';
import App from './Components/App';
export default(
<Route path="/" component={App} />
)
package.json
文件:
{
"name": "myapplication",
"version": "0.1.0",
"private": true,
"dependencies": {
"axios": "^0.19.0",
"cors": "^2.8.5",
"jquery": "^3.4.1",
"prop-types": "^15.7.2",
"react": "^16.8.6",
"react-dom": "^16.8.6",
"react-js-pagination": "^3.0.2",
"react-router": "^2.8.1",
"react-scripts": "3.0.1",
"react-select": "^2.0.0-beta.7",
"underscore": "^1.9.1"
},
"scripts": {
"start": "react-scripts start",
"build": "react-scripts build",
"test": "react-scripts test",
"eject": "react-scripts eject"
},
"eslintConfig": {
"extends": "react-app"
},
"browserslist": {
"production": [
">0.2%",
"not dead",
"not op_mini all"
],
"development": [
"last 1 chrome version",
"last 1 firefox version",
"last 1 safari version"
]
}
}
答案 0 :(得分:1)
只需尝试获取react-router
的最新版本
运行npm i react-router@latest
我几乎确定您应该使用react-router-dom
,但是如果不是这样的话...
运行npm i react-router-dom
并更改
import {Router, browserHistory} from 'react-router';
收件人
import {Router, browserHistory} from 'react-router-dom';
如果您想知道为什么会得到错误
_react.PropTypes未定义
之所以发生这种情况,是因为在react
的更高版本中,PropTypes
是导出的软件包,但是随后它们从react
中删除并创建了prop-types
。
可能您使用的是较新版本的react,但较旧的react-router
使用import {PropTypes} from 'react'
或React.PropTypes
,但在较新的版本中不存在。
看着package.json
,您正在使用"react-router": "^2.8.1"
,因为它是一个较旧的版本(现在estable在3.x中),所以该版本可能使用了旧版本的react。
正如您在React 16.0.0的changelog中所看到的。
15.x中引入的弃用已从核心软件包中删除。
React.createClass
现在可以作为create-react-class使用,React.PropTypes
作为prop-types,React.DOM
作为react-dom-factories,react-addons-test-utils作为react-dom / test -utils和浅色渲染器作为react-test-renderer / shallow。有关迁移代码和自动代码模块的说明,请参见15.5.0和15.6.0博客文章。
答案 1 :(得分:0)
我参考了本教程https://codeburst.io/getting-started-with-react-router-5c978f70df91并找到了解决方案。感谢大家。