109 votes

La propriété `history` est marquée comme requise dans `Router`, mais sa valeur est `undefined`. dans Router

Je suis nouveau sur ReactJs. Voici 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(

, document.getElementById('app'));

et le compiler avec webpack. J'ai également ajouté le composant Main à mes alias. La console affiche ces erreurs : J'ai également lu ces liens :

React Router failed prop 'history', is undefined

How do I resolve history is marked required, when value is undefined?

Upgrading React-Router and replacing hashHistory with browserHistory

et de nombreuses recherches sur le web, mais je n'ai pas pu résoudre ce problème. React Router est en version 4

188voto

betomoretti Points 1581

Si vous utilisez react-router v4, vous devez également installer react-router-dom. Ensuite, importez BrowserRouter de react-router-dom et remplacez Router par BrowserRouter. Il semble que la v4 change plusieurs choses. De plus, la documentation de react-router est obsolète. Voici 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((

     ),
     document.getElementById('root')
);

Source

11 votes

Dans la version 4, lorsque vous utilisez 'react-router-dom', il n'est pas nécessaire d'importer 'react-router'. 'react-router-dom' est complet.

4 votes

Si j'ai plusieurs balises à l'intérieur de BrowserRouter, je reçois cette erreur : "Erreur non attrapée : Un élément ne peut avoir qu'un seul enfant". Comment réparer ?

0 votes

@olefrank Oui, j'ai eu le même problème.. Je l'ai corrigé en ajoutant une

qui entoure tous les composants .. Je suis en train d'apprendre aussi et ce n'est peut-être pas la meilleure solution..

20voto

Charles Merriam Points 4498

Quelle version de React Router utilisez-vous? La version 4 a changé de la classe browserHistory à l'instanciation de browserHistory, consultez l'exemple de code dans les nouvelles docs.

Cela a pris beaucoup de personnes au dépourvu en cas de mise à niveau automatique; un document de migration sortira 'très bientôt'.

Vous devez ajouter ceci en haut:

import { createBrowserHistory } from 'history'

const newHistory = createBrowserHistory();

et

0 votes

Version 4. Pourriez-vous convertir mon code en version 4, s'il vous plaît?

0 votes

Où est customHistory défini ?

0 votes

Désolé. mieux maintenant?

4voto

Saurabh Narhe Points 144

Si vous souhaitez avoir plusieurs routes, vous pouvez utiliser switch comme ceci,

import {Switch} from 'react-router'; 

ensuite

3voto

Dimang Chou Points 438

J'ai rencontré le même problème en ES6, mais lorsque j'ai commencé à utiliser la bibliothèque 'react-router-dom', le problème a été résolu. Pour tous les fans de ES6, voici :

npm install --save react-router-dom

Dans index.js :

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

ReactDOM.render(

  ,
  document.getElementById('root')
);

0 votes

Dans index.js: ou Dans index.jsx: ?

0 votes

@RazGalstyan index.js si vous utilisez webpack.

1voto

jack.lin Points 12

La version 4 de React Router a changé plusieurs choses. Ils ont créé des éléments de routeur de niveau supérieur séparés pour les différents types d'historique. Si vous utilisez la version 4, vous devriez pouvoir remplacer par ou .
Pour plus de détails, consultez https://reacttraining.com/react-router/web/guides

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X