【问题标题】:Async action without chaining promise to actions没有将承诺链接到操作的异步操作
【发布时间】:2018-03-25 01:42:13
【问题描述】:

我在使用带有 redux 异步操作的 componentWillReceiveProps 时遇到问题,下面是我的代码和解释。

componentWillReceiveProps(nextProps) {
  if(nextProps.job.status === 'applied'){
    this.showAppliedDialog()
  }
}

componentDidMount() {
  this.props.fetchJob(this.props.match.params.id)
}

要求: 当用户单击应用按钮时 - 将用户的工作状态更改为“已申请” - 显示“感谢您的应用程序”对话框以通知用户

错误: 用户的工作状态被应用后,他重新访问路线或刷新当前路线, 显示“感谢您的申请”对话框。

预期: 不要显示“感谢您的申请”对话框

我用回调方法解决了上述问题。但这是唯一的方法吗?我想用减速器代替 继续返回我的异步调度并以回调方式进行

componentDidMount() {
  this.props.fetchJob(this.props.match.params.id)
  .then(resp => resp.status === 'applied' && this.showAppliedDialog())
}

【问题讨论】:

    标签: javascript reactjs redux redux-thunk


    【解决方案1】:

    你可以这样做。

    componentWillReceiveProps(nextProps) {
      if(nextProps.job.status === 'applied' && this.props.job.status !== 'applied'){
        this.showAppliedDialog()
      }
    }
    

    通过这样做,只有在将状态更改为“已应用”时才会显示对话框,如果已应用状态,则不会显示对话框。

    【讨论】:

    • 如果它是重定向而不是对话框怎么办?我是否也必须进行多项条件检查才能将用户重定向到上述其他页面?
    • nextProps.job.status != this.props.jobs.status 也可以工作(我使用工作中的逻辑来检测道具变化)
    • @JamieAden 即使它是重定向,此逻辑也将起作用,但是对于重定向,您最好在 ajax 调用成功时重定向以更新状态。
    • @SterlingArcher 是的,也可以。但该条件也适用于其他状态,不仅适用。
    • 貌似nextProps.job.status === 'applied' && this.props.job.status !== 'applied'的描述性不太好,那nextProps.job.status !== this.props.jobs.status && nextProps.job.state === 'applied'呢?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-27
    • 2017-09-26
    • 1970-01-01
    • 1970-01-01
    • 2021-07-20
    • 2023-03-16
    相关资源
    最近更新 更多