Обозначение prop `history 'помечено как требуется в` Router`, но его значение равно `undefined`. в маршрутизаторе
Я новичок в 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'));
и скомпилировать его с помощью webpack. Также я добавил Основной компонент в свои псевдонимы.
Консоль выдает следующие ошибки:
Я также читаю эти ссылки:
Не удалось запустить Router с опорой 'history', undefined
Как мне определить историю, отмечена обязательная, когда значение undefined?
Обновление React-Router и замена hashHistory на browserHistory
и многие поисковые запросы в Интернете, но я не мог исправить эту проблему. React Router - версия 4
Ответы
Ответ 1
Если вы используете реактивный маршрутизатор v4, вам также необходимо установить response-router-dom. После этого импортируйте BrowseRouter из режима-маршрутизатора и коммутатора Router для BrowseRouter. Кажется, что v4 меняет несколько вещей. Кроме того, документация с реактивным маршрутизатором устарела. Это мой рабочий код:
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')
);
Источник
Ответ 2
Какую версию React Router вы используете? Маршрутизатор версии 4 изменился с передачи в классе browserHistory на передачу экземпляра browserHistory, см. Пример кода в новых документах.
Это ловить много людей, которые автоматически обновляются; документ переноса будет "в любой день".
Вы хотите добавить это вверху:
import createBrowserHistory from 'history/createBrowserHistory'
const newHistory = createBrowserHistory();
и
<Router history={newHistory}/>
Ответ 3
У меня такая же проблема в ES6, но когда я переключился на использование библиотеки "response-router-dom", проблема была решена. Для всех поклонников ES6, здесь мы идем:
npm install --save response-router-dom
В index.js:
import {HashRouter, Route} from 'react-router-dom';
import App from './App';
ReactDOM.render(
<HashRouter>
<Route path="/" component={App}/>
</HashRouter>
,
document.getElementById('root')
);
Ответ 4
Я также пишу процедуру входа. И также отвечайте на тот же вопрос, как и вы. После дневной борьбы я обнаружил, что только this.props.history.push('/list/')
может сделать это вместо того, чтобы тянуть много плагинов. Кстати, версия react-router-dom
^4.2.2
. Спасибо!
handleSubmit(e){
e.preventDefault();
this.props.form.validateFieldsAndScroll((err,values)=>{
if(!err){
this.setState({
visible:false
});
this.props.form.resetFields();
console.log(values.username);
const path = '/list/';
this.props.history.push(path);
}
})
}
Ответ 5
Если вы хотите иметь несколько маршрутов, вы можете использовать такой переключатель,
import {Switch} from 'react-router';
то
<BrowserRouter>
<Switch>
<Route exact path="/" component={TodoComponent} />
<Route path="/about" component={About} />
</Switch>
</BrowserRouter>