Уничтожает ли React setstate объект Redux? - PullRequest
1 голос
/ 04 августа 2020

Сценарий :

В моем сценарии метод отправляется с использованием 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
});

Любая идея или совет приветствуются.

...