J'ai suivi le tutoriel de Tyler Mcginnis et rencontré un problème avec le routeur de réaction, en particulier avec l'historique. J'ai fini par copier son code mot à mot juste pour voir si c'était seulement moi, mais je suis toujours en train de
Warning: React.createElement: type is invalid -- expected a string (for built-
in components) or a class/function (for composite components) but got:
undefined. You likely forgot to export your component from the file it's
defined in.
Warning: Failed prop type: The prop `history` is marked as required in
`Router`, but its value is `undefined`. in Router
Uncaught TypeError: Cannot read property 'location' of undefined
at new Router (index_bundle.js:8347)
at index_bundle.js:19079
at measureLifeCyclePerf (index_bundle.js:18859)
at ReactCompositeComponentWrapper._constructComponentWithoutOwner (index_bundle.js:19078)
at ReactCompositeComponentWrapper._constructComponent (index_bundle.js:19064)
at ReactCompositeComponentWrapper.mountComponent (index_bundle.js:18972)
at Object.mountComponent (index_bundle.js:4070)
at ReactCompositeComponentWrapper.performInitialMount (index_bundle.js:19155)
at ReactCompositeComponentWrapper.mountComponent (index_bundle.js:19042)
at Object.mountComponent (index_bundle.js:4070)
La mise en œuvre est:
var React = require('react');
var ReactRouter = require('react-router');
var Router = ReactRouter.Router;
var Route = ReactRouter.Route;
var hashHistory = ReactRouter.hashHistory;
var IndexRoute = ReactRouter.IndexRoute;
var Main = require('../components/Main');
var Home = require("../components/Home");
var PromptContainer = require('../containers/PromptContainer');
var routes = (
<Router history={hashHistory}>
<Route path='/' component={Main}>
<IndexRoute component={Home} />
<Route path='playerOne' header='Player One' component={PromptContainer} />
<Route path='playerTwo/:playerOne' header='Player Two' component={PromptContainer} />
</Route>
</Router>
);
module.exports = routes;
Ce que j'ai remarqué, c'est que hashHistory
n'existe pas dans le module react-router
, mais il y a plutôt une createBrowserHistory
à l'intérieur du module history
. Suite à la documentation API que j'ai trouvée, je me suis dit que je devais l'appeler par là en tant que:
var BrowserHistory = require('history/createBrowserHistory);
const history = createBrowserHistory();
Cela produit une erreur createBrowserHistory is not a function
. Si vous supprimez la parenthèse, les erreurs suivantes sont générées, indiquant que l'historique est undefined
.
Lorsque je me connecte à l'historique, il est définitivement indéfini, ce qui me fait penser que le problème a trait à l'instruction d'importation, mais la console ne peut-elle pas me dire que ReactRouter.hashHistory
est introuvable?
Je comprends que ce didacticiel date d'un an et que des modifications de l'API dont je ne suis tout simplement pas au courant ont probablement été apportées, et c'est là que réside mon problème. Toute aide est appréciée!
Le routeur v4 est un peu différent
HashHistory
import { HashRouter as Router, Route } from 'react-router-dom';
import App from './components/App';
render((
<Router>
<Route exact path="/" component={App} />
</Router> ),
document.getElementById('root'));
ou BrowserHistory
import { BrowserRouter as Router, Route } from 'react-router-dom';
import App from './components/App';
render((
<Router>
<Route exact path="/" component={App} />
</Router> ),
document.getElementById('root'));
var BrowserHistory = require('history/createBrowserHistory');
const history = createBrowserHistory();
voulez-vous dire var createBrowserHistory = require...
?
aussi, il semble que createBrowserHistory
est maintenant (dans v3
) situé à history/lib/createBrowserHistory
Si cela ne fonctionne pas - quelle version de react-router
utilisez-vous?