Редуктор входа в систему работает нормально, но когда я добавляю редуктор выхода из системы, он не работает.
export const rootReducer = combineReducers({
login: loginReducer,
logout: logoutReducer
});
export const loginReducer = (state = initialState, { type, payload } :any) => {
switch (type) {
case "login":
return {...state, token: payload};
default:
return state;
}
};
Я запускаю мутацию graphql, если вход успешен, возвращается токен, который хранится с использованием приставки. Позже эта информация используется для приватной маршрутизации и т. Д. c.
let submitForm = (email: string, password: string) => {
setIsSubmitted(true);
login({
variables: {
email: email,
password: password,
},
})
.then(({ data }: any) => {
dispatch({ type: "login", payload: data.loginEmail.accessToken })
Теперь я хочу добавить редуктор выхода из системы. Я хочу выйти из системы, если нажата кнопка. Если я добавлю это в свой rootReducer, он будет скомпилирован без ошибки.
const initialState = {
token: null
};
const storeValue = store.getState();
export const logoutReducer = (state = initialState, { type, payload } :any) => {
switch (type) {
case "check":
return {...state, token: payload};
default:
return state;
}
};
Однако, если я сделаю state = storeValue
вместо initialState
, я получу ошибки при определении storeValue
& logout
, что
'storeValue'/logout implicitly has type 'any' because it does not have a type annotation and is referenced directly or indirectly in its own initializer.ts(7022)
Редактировать:
Вот как работает мой privateRouting:
export const PrivateRoute = ({ component, ...rest }: any) => {
const routeComponent = (props: any) => {
if(store.getState().login.token) {
return React.createElement(component, props)
}
else {
return <Redirect to={{ pathname: '/404' }} />
}
}
return <Route {...rest} render={routeComponent} />;
};
Я уже упоминал выше, как хранить свой токен в функция submitForm
. В зависимости от этого, как я могу использовать тот же редуктор login
для реализации выхода из системы?
<ExitToAppIcon onClick={logout}></ExitToAppIcon>