Javascript react路由器v^4.0.0未捕获类型错误:无法读取属性';地点';未定义的
我使用react路由器时遇到一些问题(我使用的是^4.0.0版) 这是我的index.jsJavascript react路由器v^4.0.0未捕获类型错误:无法读取属性';地点';未定义的,javascript,json,reactjs,react-router,Javascript,Json,Reactjs,React Router,我使用react路由器时遇到一些问题(我使用的是^4.0.0版) 这是我的index.js import React from 'react'; import ReactDOM from 'react-dom'; import App from './App'; import './index.css'; import { Router, Route, Link, browserHistory } from 'react-router'; ReactDOM.render( <Rou
import React from 'react';
import ReactDOM from 'react-dom';
import App from './App';
import './index.css';
import { Router, Route, Link, browserHistory } from 'react-router';
ReactDOM.render(
<Router history={browserHistory} >
<Route path="/" component={App} />
</Router>,
document.getElementById('root')
);
这就是我检查控制台日志时发生的情况
Router.js:43 Uncaught TypeError: Cannot read property 'location' of undefined
at new Router (Router.js:43)
at ReactCompositeComponent.js:295
at measureLifeCyclePerf (ReactCompositeComponent.js:75)
at ReactCompositeComponentWrapper._constructComponentWithoutOwner (ReactCompositeComponent.js:294)
at ReactCompositeComponentWrapper._constructComponent (ReactCompositeComponent.js:280)
at ReactCompositeComponentWrapper.mountComponent (ReactCompositeComponent.js:188)
at Object.mountComponent (ReactReconciler.js:46)
at ReactCompositeComponentWrapper.performInitialMount (ReactCompositeComponent.js:371)
at ReactCompositeComponentWrapper.mountComponent (ReactCompositeComponent.js:258)
at Object.mountComponent (ReactReconciler.js:46)
哦,这是package.json以防万一
{
"name": "teste2",
"version": "0.1.0",
"private": true,
"dependencies": {
"react": "^15.4.2",
"react-dom": "^15.4.2",
"react-router": "^4.0.0"
},
"devDependencies": {
"react-scripts": "0.9.5"
},
"scripts": {
"start": "react-scripts start",
"build": "react-scripts build",
"test": "react-scripts test --env=jsdom",
"eject": "react-scripts eject"
}
}
我已经在其他地方检查过了,但我没有找到解决办法
非常感谢你们的耐心和帮助 你做错了几件事
react-router
导入所有内容,它应该是react-router-dom
react router dom
不导出router
,而是导出BrowserRouter
,因此需要从'react router dom
导入{BrowserRouter as router}看起来您刚刚使用了V3应用程序,并希望它能与v4一起使用,这不是一个好主意。我尝试了这里建议的所有方法,但都不适用于我。所以,如果我能帮助任何人解决类似的问题,我检查过的每一个教程都不会更新到第4版 以下是我为让它工作所做的
import React from 'react';
import App from './App';
import ReactDOM from 'react-dom';
import {
HashRouter,
Route
} from 'react-router-dom';
ReactDOM.render((
<HashRouter>
<div>
<Route path="/" render={()=><App items={temasArray}/>}/>
</div>
</HashRouter >
), document.getElementById('root'));
从“React”导入React;
从“./App”导入应用程序;
从“react dom”导入react dom;
进口{
哈希路由器,
路线
}从“反应路由器dom”;
ReactDOM.render((
}/>
),document.getElementById('root');
这是我唯一能让它在没有任何错误或警告的情况下工作的方法
如果您想为我将道具传递给您的组件,最简单的方法是:
<Route path="/" render={()=><App items={temasArray}/>}/>
}/>
更换
import { Router, Route, Link, browserHistory } from 'react-router';
与
它将开始工作。
这是因为react router dom导出BrowserRouter(如果需要,请使用此代码)
从“/routes”导入{useRoutes};
从“react Router dom”导入{BrowserRouter as Router};
导出常量应用=()=>{
const routes=useRoutes(true);
返回(
{routes}
);
};
///routes.js
从“react router dom”导入{交换机、路由、重定向};
导出常量用户路由=(已验证)=>{
如果(未经验证){
返回(
);
}
返回(
);
};
如果你已经在appBar上安装了
useStyles
,你可以添加你想要的样式。就是这样,哈哈。我在Udemy学习一门课程,它使用V3。我试过了,没用。我查找了一些在V4中使用它的方法,但我所能找到的只是人们告诉我如何评分。我就是这样来到这里的。无论如何,非常感谢你的帮助。我真的很感激:DHey Tyler,你有相同的示例代码吗?在遵循这些步骤之后,我在4.1.1中的react router中出现了相同的错误。我需要自己创建一个历史对象吗?谢谢!通过阅读您的答案,我发现由于react路由器版本,我出现了错误。因为我找不到v4的好文档,所以我决定降级到V3,然后它开始为我工作wanted@TylerMcGinnis“react router dom不导出路由器”react router dom正在抛出此警告,提示使用路由器
。我有一个类似的设置,但在我的登录页上,我的第一个组件没有单击菜单链接就出现了。我将发布一个问题,谢谢react router dom替换react router,还是您需要同时安装这两个?只保留react router domhi,考虑添加一些有关代码的信息,解释您所做的操作。我使用文件夹中的router,您可以在App.js中的导入中看到名称routes,如果我已验证(),我将使用此代码验证。我传授的功能是使用路由器for App.jsedit you answer,让阅读它的用户对情况和解决方案有一个完整的了解
import { Router, Route, Link, browserHistory } from 'react-router';
import { BrowserRouter as Router, Route } from 'react-router-dom';
import { useRoutes } from "./routes";
import { BrowserRouter as Router } from "react-router-dom";
export const App = () => {
const routes = useRoutes(true);
return (
<Router>
<div className="container">{routes}</div>
</Router>
);
};
// ./routes.js
import { Switch, Route, Redirect } from "react-router-dom";
export const useRoutes = (isAuthenticated) => {
if (isAuthenticated) {
return (
<Switch>
<Route path="/links" exact>
<LinksPage />
</Route>
<Route path="/create" exact>
<CreatePage />
</Route>
<Route path="/detail/:id">
<DetailPage />
</Route>
<Redirect path="/create" />
</Switch>
);
}
return (
<Switch>
<Route path={"/"} exact>
<AuthPage />
</Route>
<Redirect path={"/"} />
</Switch>
);
};
appBar: {
transition: theme.transitions.create(['margin', 'width'], {
easing: theme.transitions.easing.sharp,
duration: theme.transitions.duration.leavingScreen
}),
backgroundColor: '#fff' // add the styles here
}