web-dev-qa-db-fra.com

Le prop `history` est marqué comme requis dans` Router`, mais sa valeur est `undefined`. dans le routeur

Je suis nouveau à ReactJs. Ceci est mon code: 

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'));

et compiler avec webpack. J'ai aussi ajouté le composant principal à mes alias. La console génère ces erreurs:   J'ai aussi lu ces liens: 

React Router a échoué dans l'historique 'historique', n'est pas défini

Comment puis-je résoudre l'historique est marqué obligatoire, lorsque la valeur est indéfinie?

Mise à niveau de React-Router et remplacement de hashHistory par browserHistory

et de nombreuses recherches sur le Web, mais je ne pouvais pas résoudre ce problème. React Router est la version 4

75
Mammad2c

Si vous utilisez react-router v4, vous devez également installer react-router-dom. Après cela, importez BrowserRouter de react-router-dom et basculez Router for BrowserRouter. Il semble que la v4 change plusieurs choses. De plus, la documentation de react-router est obsolète. Ceci est mon code de travail:

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')
);

La source

138
betomoretti

Quelle version de React Router utilisez-vous? La version 4 du routeur n'est plus passée de la classe browserHistory à une instance de browserHistory, voir l'exemple code dans la nouvelle documentation .

Cela a attiré beaucoup de gens qui améliorent automatiquement; un document de migration sera publié «n'importe quel jour maintenant».

Vous voulez ajouter ceci en haut:

import createBrowserHistory from 'history/createBrowserHistory'

const newHistory = createBrowserHistory();

et 

<Router history={newHistory}/>
13
Charles Merriam

Si vous voulez avoir plusieurs routes vous pouvez utiliser un commutateur comme ceci,

import {Switch} from 'react-router'; 

puis 

<BrowserRouter>
     <Switch>
         <Route exact path="/" component={TodoComponent} />
         <Route path="/about" component={About} />
     </Switch>
</BrowserRouter>
4
Saurabh Narhe

J'ai eu le même problème dans ES6, mais lorsque je suis passé à la bibliothèque 'react-router-dom', le problème a été résolu. Pour tous les fans d'ES6, c'est parti:

npm install --save react-router-dom 

Dans index.js:

import {HashRouter, Route} from 'react-router-dom';
import App from './App';

ReactDOM.render(
    <HashRouter>
        <Route path="/" component={App}/>
    </HashRouter>
  ,
  document.getElementById('root')
);
3
Dimang Chou

La version 4 de React Router a changé plusieurs choses. Ils ont créé des éléments de routeur de niveau supérieur distincts pour les différents types d’historique. Si vous utilisez la version 4, vous devriez pouvoir remplacer <Router history={hashHistory}> par <HashRouter> ou <BrowserRouter>.
Pour plus de détails, voir https://reacttraining.com/react-router/web/guides

1
jack.lin

J'écris aussi une pratique de connexion. Et rencontrez aussi la même question comme vous. Après une journée difficile, j’ai constaté que seule la fonction this.props.history.Push('/list/') peut le faire au lieu d’ajouter beaucoup de plugins. Au fait, la version react-router-dom est ^4.2.2. Merci!

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);
        }
    })
}

0
YangFang

Ce qui suit fonctionne pour moi avec "react-router@^3.0.5"

package.json:

"react-dom": "^16.6.0",
"react-router": "^3.0.5"

index.js:

import { render } from 'react-dom'
import { App } from './components/App'
import { NotFound404 } from './components/NotFound404'
import { Router, Route, hashHistory } from 'react-router'

render(
    <Router history={hashHistory}>
        <Route path='/' component={App} />
        <Route path='*' component={NotFound404} />
    </Router>,
    document.getElementById('root')
)
0
Pritam Manerao