我有一个登录页,我在提交表单时发送登录详细信息到服务器。
服务器要么用访问令牌响应,要么用错误消息响应。
在这两种情况下,我分别调度loginSucess或loginFailure,并相应地在状态中设置isLoggedIn属性。
componentDidUpdate(prevProps: any) {
// if (hasPropChanged("isLoggedIn", this.props, prevProps)) {
const { isLoggedIn } = this.props;
if (isLoggedIn) this.props.history.push("/admin");
else {
notification.open({
message: "Login error",
description: "Invalid login credentials"
});
}
// }
}
但问题是,如果用户第一次发送无效的凭据,商店就会更新,我可以在前端显示一个通知。但是,如果isLoggedIn属性未更改(用户连续多次发送无效凭据),则组件不会再次重新呈现或更新。如何检测何时接收到api响应并调用了调度?并相应地显示通知。
发布于 2020-01-02 09:00:05
您需要一个额外的道具(通常称为error
或类似工具)来模拟此状态。然后就很简单了,你可以将error
设置为true,或者保存一个带有错误信息的字符串。或者,显示来自redux操作的通知,而不是来自组件的通知。
发布于 2020-01-02 06:16:05
react比较prevProps
和currentProps
,如果没有任何更改,它将不会更新组件,要覆盖该行为,请使用:
shouldComponentUpdate(nextProps, nextState)
通过实现此方法,即使属性相同,也可以返回true来更新组件,在本例中为isLoggedIn
发布于 2020-01-02 10:28:01
我同意timotgl的回答,但我相信你需要更多的解释。
在我看来,你有两个选择:
isLoggedIn
或其他redux状态。你说的“当API属性没有改变(用户连续多次发送无效凭证)”这部分给我的感觉是,你不会改变每次isLoggedIn
调用的redux状态。因此,您应该有redux状态来告知API调用是否成功(例如,isSuccess
),并为每个API调用相应地更改它。1. You should handle this in your action itself, where you make the API call. Right when you know if each API call is a success or failure, you should show the notification there.
在我看来,选择第二个。我想,条件更少,状态变化也更少。
希望你正在处理与我所说的内容相关的事情,并希望它能有所帮助!
https://stackoverflow.com/questions/59558438
复制相似问题