Reactjs 即使道具不变,我如何知道是否在redux中调用调度?
我有一个登录页面,我将在提交表单时向服务器发送登录详细信息 服务器会以访问令牌或错误消息进行响应 在这两种情况下,我分别调度LoginSAccess或loginFailure,并相应地将isLoggedIn属性设置为stateReactjs 即使道具不变,我如何知道是否在redux中调用调度?,reactjs,redux,Reactjs,Redux,我有一个登录页面,我将在提交表单时向服务器发送登录详细信息 服务器会以访问令牌或错误消息进行响应 在这两种情况下,我分别调度LoginSAccess或loginFailure,并相应地将isLoggedIn属性设置为state componentDidUpdate(prevProps: any) { // if (hasPropChanged("isLoggedIn", this.props, prevProps)) { const { isLoggedIn } = this
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响应并调用分派?并相应地显示通知 您需要查看reducer store,如果您没有改变您的状态,那么它将不会反映在这里。因此,每完成一次后台服务器调用,您就必须修改state对象,如果它具有相同的值,则为event。
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"
});
}
// }
}
在每次提交单击时,在有效负载中发送一个随机数,完成后,将该随机数作为存储属性发送回组件,并保存在一些隐藏的输入中。react compare
prevProps
和currentProps
,如果没有任何更改,它将不会更新组件,要覆盖该行为,请使用:
通过实现此方法,即使道具相同,您也可以返回true来更新组件,在您的情况下,它是
isLoggedIn
您需要一个附加道具(通常称为error
或类似道具)来模拟此状态。这样就非常简单了,您可以将error
设置为true或保存带有错误消息的字符串。或者,显示redux操作的通知,而不是组件的通知。我同意timotgl的回答,但我相信您需要更多的解释
在我看来,你有两个选择:
isLoggedIn
,或其他一些redux状态。您说“当isLoggedIn
prop未更改(用户连续多次发送无效凭据)”的部分让我觉得您没有更改每个API调用的redux状态。因此,您应该有redux状态,它告诉您API调用是否成功(例如,issucess
),并为每个API调用相应地更改它
希望你正在处理与我所说的相关的事情,并希望它能有所帮助 即使isLoggedIn保持为false,我如何变异状态。这是胡说八道,如果新状态没有差异,你不需要变异任何东西。