Javascript ReactJS x Redux:还原程序未返回状态值
嗨,我是React和Redux的新手 我在尝试从数据库获取用户对象时遇到了reducer的问题。但它似乎并没有让国家回到正确的位置 在我的前端editProfile.js上: 操作\u user.js: Reducer userReducer.js: 我的目标是从存储中检索对象retrievedUser。我尝试在前端控制台上运行console.log(this.props.store),它确实返回了初始状态fetchUserState的映射 我也尝试过state.set(不返回),它成功了,所以我得出结论,return语句有问题 其他详情: 使用MERN堆栈。这看起来是错误的: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(不返回),它成功了
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;
}
};