Обозначение prop `history 'помечено как требуется в` Router`, но его значение равно `undefined`. в маршрутизаторе - программирование
Подтвердить что ты не робот

Обозначение 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

4b9b3361

Ответ 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>