У меня возникли проблемы с реактивным маршрутизатором (я использую версию ^ 4.0.0).
это мой index.js
import React from 'react';
import ReactDOM from 'react-dom';
import App from './App';
import './index.css';
import { Router, Route, Link, browserHistory } from 'react-router';
ReactDOM.render(
<Router history={browserHistory} >
<Route path="/" component={App} />
</Router>,
document.getElementById('root')
);
App.js - это что угодно. Я публикую здесь основной, потому что это не проблема (я считаю)
import React, { Component } from 'react';
import logo from './logo.svg';
import './App.css';
class App extends Component {
render() {
return (
<div className="App">
<div className="App-header">
<img src={logo} className="App-logo" alt="logo" />
<h2>Welcome to React</h2>
</div>
<p className="App-intro">
To get started, edit <code>src/App.js</code> and save to reload.
</p>
</div>
);
}
}
export default App;
и вот что происходит, когда я проверяю журнал консоли
Router.js:43 Uncaught TypeError: Cannot read property 'location' of undefined
at new Router (Router.js:43)
at ReactCompositeComponent.js:295
at measureLifeCyclePerf (ReactCompositeComponent.js:75)
at ReactCompositeComponentWrapper._constructComponentWithoutOwner (ReactCompositeComponent.js:294)
at ReactCompositeComponentWrapper._constructComponent (ReactCompositeComponent.js:280)
at ReactCompositeComponentWrapper.mountComponent (ReactCompositeComponent.js:188)
at Object.mountComponent (ReactReconciler.js:46)
at ReactCompositeComponentWrapper.performInitialMount (ReactCompositeComponent.js:371)
at ReactCompositeComponentWrapper.mountComponent (ReactCompositeComponent.js:258)
at Object.mountComponent (ReactReconciler.js:46)
ой, а это package.json на всякий случай
{
"name": "teste2",
"version": "0.1.0",
"private": true,
"dependencies": {
"react": "^15.4.2",
"react-dom": "^15.4.2",
"react-router": "^4.0.0"
},
"devDependencies": {
"react-scripts": "0.9.5"
},
"scripts": {
"start": "react-scripts start",
"build": "react-scripts build",
"test": "react-scripts test --env=jsdom",
"eject": "react-scripts eject"
}
}
Я проверял это в других местах, но не нашел способа решить эту проблему.
Спасибо, ребята, за терпение и помощь !!
источник
Router
.Я пробовал все, что предлагалось здесь, но у меня не получилось. Так что на случай, если я смогу помочь кому-нибудь с подобной проблемой, каждый проверенный мной учебник не обновлен для работы с версией 4.
Вот что я сделал, чтобы все заработало
import React from 'react'; import App from './App'; import ReactDOM from 'react-dom'; import { HashRouter, Route } from 'react-router-dom'; ReactDOM.render(( <HashRouter> <div> <Route path="/" render={()=><App items={temasArray}/>}/> </div> </HashRouter > ), document.getElementById('root'));
Это единственный способ заставить его работать без ошибок или предупреждений.
Если вы хотите передать реквизиты своему компоненту, для меня самый простой способ:
<Route path="/" render={()=><App items={temasArray}/>}/>
источник
Заменить
import { Router, Route, Link, browserHistory } from 'react-router';
С участием
import { BrowserRouter as Router, Route } from 'react-router-dom';
Он начнет работать. Это потому, что react-router-dom экспортирует BrowserRouter
источник
так что если вам нужно использовать этот код)
import { useRoutes } from "./routes"; import { BrowserRouter as Router } from "react-router-dom"; export const App = () => { const routes = useRoutes(true); return ( <Router> <div className="container">{routes}</div> </Router> ); }; // ./routes.js import { Switch, Route, Redirect } from "react-router-dom"; export const useRoutes = (isAuthenticated) => { if (isAuthenticated) { return ( <Switch> <Route path="/links" exact> <LinksPage /> </Route> <Route path="/create" exact> <CreatePage /> </Route> <Route path="/detail/:id"> <DetailPage /> </Route> <Redirect path="/create" /> </Switch> ); } return ( <Switch> <Route path={"/"} exact> <AuthPage /> </Route> <Redirect path={"/"} /> </Switch> ); };
источник