React Router failed prop 'history', undefined - программирование
Подтвердить что ты не робот

React Router failed prop 'history', undefined

Я слежу за учебником Тайлера Макгинниса и ударяю об этом с помощью маршрутизатора, особенно с историей. Я закончил тем, что копировал его код дословно, чтобы убедиться, что это только я, но я все еще получаю

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

Реализация:

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;

Я заметил, что hashHistory не существует в модуле react-router, но в модуле history есть createBrowserHistory. После того, как я нашел API-документ API, я решил, что должен называть его следующим:

var BrowserHistory = require('history/createBrowserHistory);
const history = createBrowserHistory();

Выполнение этого вызывает ошибку createBrowserHistory is not a function. Удаление парантезы приводит к тем же ошибкам, что и выше, с указанием истории undefined.

Когда я регистрирую историю, это определенно undefined, что заставляет меня полагать, что проблема связана с оператором import, но разве консоль не сообщит мне, что ReactRouter.hashHistory не может быть найден?

Я понимаю, что этот учебник - год, и, вероятно, были изменения в API, о котором я просто не знал, и о том, где моя проблема. Любая помощь приветствуется!

4b9b3361

Ответ 1

Маршрутизатор v4 немного отличается

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

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

Ответ 2

var BrowserHistory = require('history/createBrowserHistory');
const history = createBrowserHistory();

Вы имеете в виду var createBrowserHistory = require...?

похоже, что теперь createBrowserHistoryv3) находится в history/lib/createBrowserHistory

Если это не сработает - какую версию react-router вы используете?