Я полагаю, что вы используете систему аутентификации неправильным образом
В React все должно существовать иерархическим образом.
В вашем случае у вас есть состояние аутентификации, которое может измениться, и при входе в системусостояние меняется, все должно перерисовываться.правильный способ сделать это - использовать Context API для обработки зарегистрированного состояния, поэтому при изменении состояния весь экран будет перерисован
. Вот решение вашей проблемы:
AuthContext.js
const AuthContext = React.createContext();
export class AuthProvider extends React.Component {
state = {
isLoggedIn: false,
};
login = (username, password) => {
someLoginRequestToServer(username, password).then(response => {
this.setState({
isLoggedIn: response.isLoggedIn,
});
});
};
logout = () => {
someLogoutRequestToServer().then(() => {
this.setState({ isLoggedIn: false });
});
};
render() {
return (
<AuthContext.Provider
value={{
loggedIn: this.state.isLoggedIn,
login: this.login,
logout: this.logout,
}}>
{this.props.children}
</AuthContext.Provider>
);
}
}
export const AuthConsumer = AuthContext.Consumer;
SomeCustomAuthComponent
class CustomAuthComponent extends React.Component {
render() {
return (
<AuthConsumer>
{({ loggedIn, login, logout }) => (
<div>
<p>You Are {loggedIn ? 'Logged in' : 'Logged out'}</p>
<button onClick={loggedIn ? () => logout() : () => login('abcd', '12345')} />
</div>
)}
</AuthConsumer>
);
}
}
Или вы можете использовать избыточность для управления состоянием иresponse-redux, поскольку он использует API Context Context под капотом.
надеюсь, это поможет вам!:)