支持`history`在`Router`中被标记为必需,但它的值是'undefined`.在路由器中

Mam*_*d2c 81 reactjs react-router

我是ReactJs的新手.这是我的代码:

var React = require('react');
var ReactDOM = require('react-dom');
var {Route, Router, IndexRoute, hashHistory} = require('react-router');
var Main = require('Main');
ReactDOM.render(
  <Router history={hashHistory}>
  <Route path="/" component={Main}></Route>
</Router>, document.getElementById('app'));
Run Code Online (Sandbox Code Playgroud)

并使用webpack进行编译.我还将主要组件添加到我的别名中.控制台抛出这些错误: 我也阅读了这些链接:

React Router失败道具'历史',未定义

当值未定义时,如何标记历史记录是必需的?

升级React-Router并用browserHistory替换hashHistory

和网上的许多搜索,但我无法解决这个问题.React Router是版本4

bet*_*tti 155

如果您使用的是react-router v4,则还需要安装react-router-dom.之后,从react-router-dom导入BrowserRouter并切换Router for BrowserRouter.似乎v4改变了几件事.此外,react-router文档已过时.这是我的工作代码:

import React from 'react';
import ReactDOM from 'react-dom';
import { BrowserRouter, Route } from 'react-router-dom'
import App from './components/App';

ReactDOM.render((
     <BrowserRouter>
          <Route path="/" component={App}/>
     </BrowserRouter>
     ),
     document.getElementById('root')
);
Run Code Online (Sandbox Code Playgroud)

资源

  • 在版本4中,当您使用'react-router-dom'时,无需导入'react-router'.'react-router-dom'已完成. (10认同)
  • 如果我在BrowserRouter中有多个<Route ...>标签,我会收到此错误:"未捕获错误:<路由器>可能只有一个子元素".怎么修? (4认同)
  • @NSCoder 不,路由器也位于“react-router-dom”中,因此无需同时包含“react-router-dom”和“react-router”。如果您需要同时使用 'HashRouter' 和 'router',则必须包含 'react-router-dom'。 (2认同)
  • @olefrank 您需要将多个 `&lt;Route...&gt;` 语句包装在 `&lt;switch&gt;` 包装器中,而不是将它们包装在 `&lt;div&gt;` 中。如果您使用 `&lt;div&gt;`,这将使路由包含在内,这意味着如果一个路径可以匹配两个路由,则两个组件都将呈现。在此处查看完整详细信息:https://medium.com/@djoepramono/react-router-4-gotchas-2ecd1282de65 (2认同)

Cha*_*iam 16

您使用的是哪个版本的React Router?路由器版本4从传递browserHistory类更改为传递browserHistory的实例,请参阅新文档中代码示例.

这已经吸引了许多自动升级的人; 迁移文件将"现在任何一天"出来.

您想将此添加到顶部:

import createBrowserHistory from 'history/createBrowserHistory'

const newHistory = createBrowserHistory();
Run Code Online (Sandbox Code Playgroud)

<Router history={newHistory}/>
Run Code Online (Sandbox Code Playgroud)