В файле App.js я выполняю маршрутизацию (для маршрутизации я использую react-routesv4). С маршрутами также есть боковая панель. Причина боковой панели У меня есть состояние, которое контролирует эту боковую панель. Всякий раз, когда состояние боковой панели изменяется, другой компонент, связанный с текущим маршрутом, перемонтируется.
Например, здесь у меня есть компонент User, который перемонтируется каждый раз, когда изменяется состояние боковой панели. А в компоненте «Пользователь» я извлекаю данные с помощью хука useEffects, поэтому каждое изменение состояния боковой панели также запускает этот хук.
const App = ({classes}) => {
const [isDrawerOpen, setIsDrawerOpen] = useState(false);
const handleDrawerToggle = () => {
setIsDrawerOpen(!isDrawerOpen)
};
return (
<BrowserRouter>
<CssBaseline/>
<Switch>
<Route path = {'/login'} component = {Login}/>
<Fragment>
<Sidebar isDrawerOpen = {isDrawerOpen} toggleDrawer = {handleDrawerToggle}/>
<main role = "main" className = {classes.content}>
<Switch>
<Route exact path='/' component = {User(Dashboard)}/>
<Route path='/users' component = {Admin(Users)}/>
</Switch>
</main>
</Fragment>
</Switch>
</BrowserRouter>
);
};
export default withStyles(styles)(App);
const Authorization = (allowedRoles) => (WrappedComponent) => {
const WithAuthorization = (props) => {
const role = helpers.getRole();
if (role === null){
return <Redirect to = {{ pathname: '/login', state: { from: props.location } }} />
} else if (allowedRoles.includes(role)) {
return <WrappedComponent {...props} />
} else {
return <Typography>You don't have access</Typography>
}
};
return WithAuthorization;
};
export default Authorization;
Не знаете, чем вызвано такое поведение?
У меня есть авторизация Hoc, которая оборачивает каждый компонент, который необходимо отобразить, и теперь, когда вы сказали, что я удалил его, и теперь изменение состояния боковой панели не перемонтирует компонент (я отредактировал вопрос)





Это связано с тем, что HoC оценивается при каждом рендеринге. Пытаться:
const AuthorisedComponent = requireLogin(MyComponent); // instantiate hoc once
<Route path = "/mycomponent" component = {AuthorisedComponent} /> // use hoc
он все еще перемонтирует компонент
Это все еще должно быть из-за некоторых HoC, можете ли вы опубликовать обновленный код? Важно, чтобы вы поместили объявление const вне рендера.
Это настоящий код или у вас есть HoC на некоторых маршрутах?