<Link> не будет перерисовывать компонент после приватной / публичной маршрутизации и редукционной интеграции - PullRequest
0 голосов
/ 26 мая 2018

Обновление: я загрузил демо-версию на codepen https://codesandbox.io/s/yjl2j4ko9

У меня есть Drawer из material-ui css lib (панель управления администратора) внутри AppRouter.Я перемещаюсь по секциям с помощью <Link>, но после интеграции маршрутов редукса и публичного / личного доступа <Link> только изменяет URL-адрес и не выполняет повторную визуализацию компонента внутри Drawer.Если я обновлю страницу, повторный рендер будет работать.Вот мой роутер:

<Router history={history}>
<div>
      <Switch>
            <PublicRoute path="/" component={LoginPage} exact={true} />
            <PrivateRoute path="/Control" component={Control} />
            <PrivateRoute path="/Persons" component={Persons} />
            <PrivateRoute path="/Graphs" component={Graphs} />

        </Switch>
  </div>

С моим старым маршрутом (без частных / публичных путей) работал нормально.Пример:

    <Route path="/Controls" render={()=><Controls/>}/>

Я уже пробовал pure: false в privateroute.js, что я могу попробовать?есть способ использовать что-то вроде render={()=><Controls/>} также в публичных частных маршрутах?

1 Ответ

0 голосов
/ 26 мая 2018

Вы продублировали свой контекст маршрутизатора в AppRouter, который должен быть просто:

const AppRouter = () => (
  <div>
    <PublicRoute path="/" component={LoginPage} exact={true} />
    <PrivateRoute path="/Buckets" component={BucketsPage} />
    <PrivateRoute path="/Payments" component={PaymentsPage} />
  </div>
);

Вы уже настроили реакцию-маршрутизатор в index.js:

ReactDOM.render(
  <Provider store={store}>
    <BrowserRouter>
      <App />
    </BrowserRouter>
  </Provider>,

  document.getElementById("root")
);

Таким образом, вы можете удалить{ pure: false } и другие ненужные withRouter документы, если они не требуются.

...