Reactjs 在另一个调度覆盖状态后立即调度
我对React和React redux是新手,我在调度和更新状态方面遇到了很多麻烦 在服务器响应之后,如果用户经过身份验证,我将继续执行下面的操作Reactjs 在另一个调度覆盖状态后立即调度,reactjs,redux,react-redux,Reactjs,Redux,React Redux,我对React和React redux是新手,我在调度和更新状态方面遇到了很多麻烦 在服务器响应之后,如果用户经过身份验证,我将继续执行下面的操作 this.props.dispatch(addAuth(logged.user)); this.props.dispatch(updateAvatar(logged.user.avatar)) 但是,在我这样做之后,日志是 {type: "AUTHENTICATE", user: "cash"} //(LOGGING ACTION FROM RE
this.props.dispatch(addAuth(logged.user));
this.props.dispatch(updateAvatar(logged.user.avatar))
但是,在我这样做之后,日志是
{type: "AUTHENTICATE", user: "cash"} //(LOGGING ACTION FROM REDUCER)
{isAuth: true, username: "cash", myAvatar: undefined, dispatch: ƒ}
{type: "UPDATE_AVATAR", updateAvatar: "http://www.example.com/1234.jpg"} //(LOGGING ACTION FROM REDUCER)
{isAuth: undefined, username: undefined, myAvatar: undefined, dispatch: ƒ}
这是初始状态
const intialState = {
isAuth: false,
username: '',
myAvatar: ''
};
行动
function addAuth(user){
return {
type: 'AUTHENTICATE',
user: user.username,
};
}
function updateAvatar(avatarLink){
return {
type: 'UPDATE_AVATAR',
updateAvatar: avatarLink
};
}
减速器
function reducer(state = intialState, action) {
switch(action.type){
case 'AUTHENTICATE':
return {
isAuth: true,
username: action.user,
};
case 'LOGOUT':
return {
isAuth: false
}
case 'UPDATE_AVATAR':
return {
myAvatar: action.updateAvatar
};
default:
return state;
}
}
我想要的结果是更新isAuth和用户名,然后像这样更新化身状态
{isAuth: true, username: "cash", myAvatar: undefined, dispatch: ƒ}
{isAuth: true, username: "cash", myAvatar: "http://www.example.com/1234.jpg", dispatch: ƒ}
返回一个新对象而不指定所有属性,留下一些未定义的属性 如果要创建旧状态的副本并更改此新对象
对象,则应查找assign
。根据这一点,您的身份验证
操作应减少:
return Object.assign({}, state, {
isAuth: true,
username: action.username
})
如果要复制其他未指定的值,则可以以相同的方式重写其他操作
来自以下方面的说明:
我们不会改变国家。我们使用Object.assign()
创建一个副本。
Object.assign(状态,{visibilityFilter:action.filter})
错误:它将变异第一个参数。你必须提供一个空的
对象作为第一个参数。还可以启用对象排列
操作员建议改为写入{…state,…newState}
addAuth
是如何工作的(例如,在中间件中对服务器的异步调用)?它的回报是什么?如何获取avatarLink
?@OriDrori一旦安装了我的App.js组件,我就向服务器发出请求,查看是否有使用Passport.js的会话,并从数据库中获取该用户。所以,我获取用户,然后查询数据库中他们的配置文件图像,并将其返回到名为user的对象中。所以它应该是user={username:'cash',avatar:'example.jpg'},我只需将这些属性传递给不同的actionsHow您是否查询服务器(thunk、api中间件等)?@OriDrori使用Fetch api,我在后端使用Express和Mongoose,但如何从redux调用Fetch api?我的问题正是这个!非常感谢你!!我一直在绞尽脑汁redux@tkss很高兴我能帮忙。请选择其中一个答案作为正确答案。