Есть ли лучший (больше React) способ вызвать функцию рендеринга ...
Обычный способ - иметь состояние, в данном случае как минимум логическое значение для пользователявошел в систему и обновляет это состояние, когда пользователь входит в систему успешно или выходит из системы. Обновление состояния запускает рендеринг.
В вашем случае, поскольку вы используете Redux, у вас, вероятно, будет там ваше состояние.
Я не использую Redux (пока?), Этосмутно, как бы это выглядело, примерно (если вы используете компонент класса таким, каким вы его представляете):
class App extends Component {
constructor(props) {
super(props);
this.state = {
loggedIn: /*...initial value, perhaps from web storage or cookie...*/;
};
this.onLogin = this.onLogin.bind(this);
this.onLogout = this.onLogout.bind(this);
}
onLogin() {
// ...probably stuff here, then:
this.setState({loggedIn: true});
}
onLogout() {
// ...probably stuff here, then:
this.setState({loggedIn: false});
}
render() {
if (this.state.logedIn) {
return <AppComponent onLogout={this.onLogout}/>;
}
return <Login onLogin={this.onLogin}/>;
}
}
или с крючками:
const App = () => {
const [loggedIn, setLoggedIn] = useState(/*...initial value, perhaps from web storage or cookie...*/);
const onLogin = useCallback(() => {
// ...probably stuff here, then:
setLoggedIn(true);
}, [loggedIn]);
const onLogout = useCallback(() => {
// ...probably stuff here, then:
setLoggedIn(false);
}, [loggedIn]);
if (this.state.logedIn) {
return <AppComponent onLogout={onLogout}/>;
}
return <Login onLogin={onLogin}/>;
}
(опять же,примерно)