React маршрутизатор dom изменяет URL-адрес, не отображает компонент

#javascript #reactjs

Вопрос:

Я использую "react-router": "^5.2.1" , и "react-router-dom": "^5.3.0" когда я использую history.push() , я вижу, что браузер изменяет URL-адрес, но он не отображает мой компонент, прослушивающий путь. Он отображается только в том случае, если я обновляю страницу. Это также происходит на отдельных страницах, когда я history.push пытаюсь перенаправить пользователя, когда он нажимает кнопку. Любые советы/ рекомендации по поводу того, что я делаю, будут оценены по достоинству.

Я уже пытался обернуть экспорт приложения с помощью withRouter (), но изменений нет. Я также завернул свои маршруты в lt;Switchgt;

Я также использую крючки на своих дочерних страницах.

Вот как мой App.js похоже на :

 import React ,{ useState, useEffect } from "react"; import { createBrowserHistory } from "history"; import { Router, Route, Switch, withRouter, Redirect } from "react-router-dom"; import { useSelector } from "react-redux"; import JsonData from "./data/data.json"; import axios from "axios";  const App = () =gt; {  const [landingPageData, setLandingPageData] = useState({});  useEffect(() =gt; {  setLandingPageData(JsonData);  }, []);   const { user: currentUser } = useSelector(state =gt; state.auth);   const hist = createBrowserHistory();   return (  lt;Router history={hist}gt;  {currentUser ? (  lt;divgt;  lt;Layoutgt;  lt;Switchgt;  lt;Route path="/home" render={() =gt; lt;Header data={landingPageData.Header} /gt;} /gt;  lt;Route path="/destinations" render={() =gt; lt;Destinations data={landingPageData.Destinations} /gt;} /gt;  lt;/Switchgt;  lt;/Layoutgt;  lt;/divgt;  ) : (  lt;divgt;  lt;Layout gt;  lt;Switchgt;  lt;Route path="/register-page" component={Register} /gt;  lt;Route path="/login" component={Login} /gt;  lt;/Switchgt;  lt;/Layoutgt;  lt;/divgt;  )}  lt;/Routergt;  ); };  export default App;   

Мой index.js :

 import React from 'react'; import ReactDOM from 'react-dom';  import App from './App'; import { Provider } from "react-redux"; import { createBrowserHistory } from "history"; import * as serviceWorker from './serviceWorker'; import { store, persistor } from "./store"; import { PersistGate } from "redux-persist/integration/react";  ReactDOM.render(  lt;React.StrictModegt;  lt;Provider store={store}gt;  lt;PersistGate persistor={persistor}gt;  lt;App /gt;  lt;/PersistGategt;  lt;/Providergt;  lt;/React.StrictModegt;,  document.getElementById('root') );  serviceWorker.unregister();    

Комментарии:

1. Что lt;Layoutgt; здесь является компонентом?

2. Он состоит из моего верхнего и нижнего колонтитулов.

Ответ №1:

DOM маршрутизатора реакции BrowserRouter не экспортирует Router . Вы использовали Router вместо BrowserRouter этого .

Измените свой App.js

 import React ,{ useState, useEffect } from "react"; import { createBrowserHistory } from "history"; import { BrowserRouter, Route, Switch, withRouter, Redirect } from "react-router-dom"; import { useSelector } from "react-redux"; import JsonData from "./data/data.json"; import axios from "axios";  const App = () =gt; {  const [landingPageData, setLandingPageData] = useState({});  useEffect(() =gt; {  setLandingPageData(JsonData);  }, []);   const { user: currentUser } = useSelector(state =gt; state.auth);   const hist = createBrowserHistory();   return (  lt;BrowserRouter history={hist}gt;  {currentUser ? (  lt;divgt;  lt;Layoutgt;  lt;Switchgt;  lt;Route path="/home" render={() =gt; lt;Header data={landingPageData.Header} /gt;} /gt;  lt;Route path="/destinations" render={() =gt; lt;Destinations data={landingPageData.Destinations} /gt;} /gt;  lt;/Switchgt;  lt;/Layoutgt;  lt;/divgt;  ) : (  lt;divgt;  lt;Layout gt;  lt;Switchgt;  lt;Route path="/register-page" component={Register} /gt;  lt;Route path="/login" component={Login} /gt;  lt;/Switchgt;  lt;/Layoutgt;  lt;/divgt;  )}  lt;/BrowserRoutergt;  ); };  export default App;