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