Сценарий :
В моем сценарии метод отправляется с использованием Redux, затем немедленно вызывается React setstate
.
Проблема :
Объект Redux очищается всякий раз, когда setstate
вызывается немедленно.
Что я сделал :
Я покопался в Redux и отлаживал. Вроде все хорошо, и желаемое состояние фактически сохраняется в объекте. Тем не менее, когда я пытаюсь получить состояние, оно ничего не возвращает! Когда я прокомментировал setstate
, Redux работал хорошо.
export default class WelcomeBox extends React.Component {
constructor(props) {
super(props);
this.state = { welcomeMessage: 'Welcome to English Macchiato!' };
}
componentDidMount() {
let welcomeMessage = undefined;
/*CHECK IF THE USER INFORMATION IS AVAILABLE*/
if (store.getState().currentUser) {
welcomeMessage = 'Welcome ' +
store.getState().currentUser.name +
' ' +
store.getState().currentUser.lastName +
'!'
this.setState({ welcomeMessage: welcomeMessage });
}
/* TRY TO GET THE INFORMATION FROM SERVER */
else {
let userService = new UserService();
userService.getUserDetail((serverResponse) => {
/* EITHER THE USER HAS NOT SIGNED IN OR
THERE IS A PROBLEM WITH THE SERVER.
SO, THE SERVICE RETURNS NOTHING! */
if (!serverResponse.isSuccessful || !serverResponse || !serverResponse.outputJson)
return;
let userDetails = serverResponse.outputJson.userDetail;
console.log(userDetails);
/* PUT THE FETCHED INFORMATION IN REDUX FOR THE NEXT TIME */
store.dispatch(keepUserInformation(userDetails));
welcomeMessage = 'Welcome ' +
userDetails.name +
' ' +
userDetails.lastName +
' ' +
'!'
this.setState({welcomeMessage:welcomeMessage});
});
}
}
render() {
return (
<div className="welcomeBox">
{this.state.welcomeMessage}
</div>
)
}
}
Для части Redux :
export function keepUserInformation(user){
return {type:KEEP_USER_INFORMATION, currentUser:user}
}
Редуктор :
function keepUserInformation(state = '', action) {
switch (action.type) {
case KEEP_USER_INFORMATION:
return action.currentUser;
default:
return state;
}
}
const combinedReducers = combineReducers({
currentUser: keepUserInformation
});
Любая идея или совет приветствуются.