Я сделал функцию входа, которая обновляет state
в моем reducer
с false
до true
.Я проверяю это в моем reducer
и моей функции входа в систему.Но когда я хочу проверить состояние в другом файле, он продолжает возвращать false
.
Моя функция входа в систему:
axios
.post('api/user/login', {
username: this.state.username,
password: this.state.password
})
.then(response => {
return response;
})
.then(json => {
if (json.data.success) {
store.dispatch(loginStatus(true));
console.log('Login: ' + store.getState().loggedIn);
window.location.assign('/');
} else {
alert('Login Failed!');
}
})
.catch(error => {
alert('An Error Occured!' + error);
console.log(error);
});
, которая возвращает true
Мой редуктор:
import { LOGIN_STATUS } from "../constants/action-types";
const initialState = {
loggedIn: false
};
const rootReducer = (state = initialState, action) => {
switch (action.type) {
case LOGIN_STATUS:
state.loggedIn=action.payload;
console.log('Reducer: ' + state.loggedIn);
return {
loggedIn: state.loggedIn=action.payload
};
default:
return state;
}
};
export default rootReducer;
Что также возвращает true
Но затем в моем другом файле:
import React from 'react';
import { Redirect, Route } from 'react-router-dom';
import store from '../store/index';
const privateRouter = ({component: Component, ...rest }) => {
const isLoggedIn = store.getState().loggedIn;
console.log('PrivateRoute: ' + isLoggedIn);
return (
<Route
{...rest}
render={props =>
isLoggedIn ? (
<Component {...props} />
) : (
<Redirect to={{ pathname: '/login', state: { from: props.location } }} />
)}
/>
)
};
export default privateRouter;
возвращается false
.Я делаю что-то не так с получением государства?Потому что в моей функции входа он возвращает обновленное состояние.
Обновление:
Кстати, это мой роутер:
<Provider store={store}>
<Router>
<Switch>
<Route path={'/login'} component={Login}/>
<Route path={'/register'} component={Register}/>
<PrivateRoute path={'/'} component={Home}/>
</Switch>
</Router>
</Provider>