Мне интересно, каков наилучший способ перенаправления после обработки моего действия. После моего действия пользователь должен быть перенаправлен на '/login'
.
Я использую библиотеку typesafe-actions со следующим кодом
Действие
export const Logout = createStandardAction(
AuthActionTypes.Logout
)<AuthStatus>()
Редуктор
case getType(actions.Logout):
return {
...state,
verifyingTokenStatus: ProgressStatus.Uninitialized,
tokenRefreshStatus: ProgressStatus.Uninitialized,
authStatus: action.payload,
tokenStatus: TokenStatus.Uninitialized,
user: undefined,
token: undefined,
}
Передача действия моему компоненту
const mapDispatchToProps = (dispatch: Dispatch) => ({
logout: (authStatus: AuthStatus) => dispatch(Logout(authStatus))
})
export default connect(
mapStateToProps,
mapDispatchToProps
)(({ children, authStatus, user, logout }: Layout & Props<Component>) => (
<Layout className="layout" style={{ minHeight: '100vh' }}>
<AuthTopMenu theme={'light'} mode={'horizontal'} user={user} logout={logout} />
</Layout>
))
AuthTopMenu имеет компонент аватара, который получает действие выхода из системы
const removeToken = ({ logout }: AvatarContentProps) => {
const cookies = new Cookies();
if (cookies.get('token')) {
cookies.remove('token')
logout(AuthStatus.isNotLoggedIn)
} else {
return null;
}
}
const AvatarContent = (logout: AvatarContentProps) => {
return (
<div>
<p style={{ margin: 0 }} onClick={() => removeToken(logout)} >
<Icon type="logout" />
Logout
</p>
</div>
);
}
Я не уверен, что лучший способ обработки перенаправления после того, как мое действие было запущено. Я видел, что componentDidUpdate
можно использовать для проверки, изменилось ли мое состояние вошедшего в систему пользователя, но мне было интересно, может ли мое действие позаботиться об этом?