Javascript ReactJS x Redux:还原程序未返回状态值

Javascript ReactJS x Redux:还原程序未返回状态值,javascript,reactjs,redux,react-redux,Javascript,Reactjs,Redux,React Redux,嗨,我是React和Redux的新手 我在尝试从数据库获取用户对象时遇到了reducer的问题。但它似乎并没有让国家回到正确的位置 在我的前端editProfile.js上: 操作\u user.js: Reducer userReducer.js: 我的目标是从存储中检索对象retrievedUser。我尝试在前端控制台上运行console.log(this.props.store),它确实返回了初始状态fetchUserState的映射 我也尝试过state.set(不返回),它成功了

嗨,我是React和Redux的新手

我在尝试从数据库获取用户对象时遇到了reducer的问题。但它似乎并没有让国家回到正确的位置

在我的前端editProfile.js上:

操作\u user.js:

Reducer userReducer.js:

我的目标是从存储中检索对象retrievedUser。我尝试在前端控制台上运行console.log(this.props.store),它确实返回了初始状态fetchUserState的映射

我也尝试过state.set(不返回),它成功了,所以我得出结论,return语句有问题

其他详情: 使用MERN堆栈。

这看起来是错误的:

 const mapDispatchToProps = (dispatch, store) => ({
       fetchProfile: (user) => {
           dispatch(a_fetchUser(user));
       }
    });
您需要做的是将bindActionCreators与一起使用,您可以看到示例和:

或者,您也可以将语法更改为:

 const mapDispatchToProps = (dispatch) => ({
           fetchProfile: a_fetchUser(user);
 });

我不确定state.set()方法(在reducer中)到底做什么,但是如果它改变了状态,那么reducer将不会保持纯函数,因为它改变了原始状态obj。因此,请更新下面的reducer方法,以开始返回新的状态obj,该状态obj不应改变现有的状态obj:

export const r_fetch_user = (state = fetchUserState, action) => {
    switch (action.type) {
        case 'START_FETCH_USER':
            console.log('start'); // printed
            return state.set('isProcessing', true);
        case 'END_FETCH_USER':
            if (action.response.data.status === 'success') {
                console.log(action.response.data.data[0]); // data retrieved from database successfully
                return state.set('isProcessing', false).set('retrievedUser', action.response.data.data[0]);
            } else {
                return state.set('isProcessing', false).set('retrievedUser', {});
            }
        default:
            return state;
    }
};

你的减根剂在哪里?你为什么不使用bindActionCreators?嗨,Navneet Goel!非常感谢你的帮助!我发现我的代码有问题。这是因为在从存储区检索完成之前,我正在进行控制台日志记录。我在控制台日志记录之前添加了一个计时器,我的代码运行良好。至于你的建议,我相信设定状态并不是改变状态。该函数仍然是纯函数。再次感谢您!干杯!:)你好,塔尔阿维萨!非常感谢你的帮助!我发现我的代码有问题。这是因为在从存储区检索完成之前,我正在进行控制台日志记录。我在控制台日志记录之前添加了一个计时器,我的代码运行良好。感谢您介绍bindActionCreators,这非常有帮助。干杯!:)
 const mapDispatchToProps = (dispatch, store) => ({
       fetchProfile: (user) => {
           dispatch(a_fetchUser(user));
       }
    });
function mapDispatchToProps(dispatch) {
  return bindActionCreators(actionCreators, dispatch)
}
 const mapDispatchToProps = (dispatch) => ({
           fetchProfile: a_fetchUser(user);
 });
export const r_fetch_user = (state = fetchUserState, action) => {
    switch (action.type) {
        case 'START_FETCH_USER':
            console.log('start'); // printed
            return state.set('isProcessing', true);
        case 'END_FETCH_USER':
            if (action.response.data.status === 'success') {
                console.log(action.response.data.data[0]); // data retrieved from database successfully
                return state.set('isProcessing', false).set('retrievedUser', action.response.data.data[0]);
            } else {
                return state.set('isProcessing', false).set('retrievedUser', {});
            }
        default:
            return state;
    }
};