Reactjs 即使道具不变,我如何知道是否在redux中调用调度?

Reactjs 即使道具不变,我如何知道是否在redux中调用调度?,reactjs,redux,Reactjs,Redux,我有一个登录页面,我将在提交表单时向服务器发送登录详细信息 服务器会以访问令牌或错误消息进行响应 在这两种情况下,我分别调度LoginSAccess或loginFailure,并相应地将isLoggedIn属性设置为state componentDidUpdate(prevProps: any) { // if (hasPropChanged("isLoggedIn", this.props, prevProps)) { const { isLoggedIn } = this

我有一个登录页面,我将在提交表单时向服务器发送登录详细信息

服务器会以访问令牌或错误消息进行响应

在这两种情况下,我分别调度LoginSAccess或loginFailure,并相应地将isLoggedIn属性设置为state

  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的回答,但我相信您需要更多的解释

在我看来,你有两个选择:

  • 每当API调用完成时,您应该更改
    isLoggedIn
    ,或其他一些redux状态。您说“当
    isLoggedIn
    prop未更改(用户连续多次发送无效凭据)”的部分让我觉得您没有更改每个API调用的redux状态。因此,您应该有redux状态,它告诉您API调用是否成功(例如,
    issucess
    ),并为每个API调用相应地更改它

  • 您应该在自己的操作中处理这个问题,在操作中进行API调用。当您知道每个API调用是成功还是失败时,您应该在那里显示通知
  • 在我看来,选择方案2。我想,更少的条件和更少的状态变化


    希望你正在处理与我所说的相关的事情,并希望它能有所帮助

    即使isLoggedIn保持为false,我如何变异状态。这是胡说八道,如果新状态没有差异,你不需要变异任何东西。