【问题标题】:Break if statement for a dispatch function - TypeScript, ReactJS分派函数的中断 if 语句 - TypeScript,ReactJS
【发布时间】:2021-07-29 06:31:10
【问题描述】:

一点上下文。 我有一个dispatch 函数触发我的GET axios 调用以获取进度条的状态。 到目前为止它工作正常,但问题是即使状态为 finished ,该功能也会继续。有人可以给我一个建议我该怎么办吗?这是我使用的部分代码

  const [responseId] = useState(response.data.id)

  const [processed, setProcessed] = useState(0);
  const [total, setTotal] = useState(0);
  const [status, setStatus] = useState('');


        if (responseId) {
          dispatch(fetchStatus(responseId));
        if (status === 'finished') {
          console.log('finished');
          return;
    }
  }

  useEffect(() => {
    if (statusProgress) {
      setProcessed(statusProgress.processed);
      setTotal(statusProgress.total);
      setStatus(statusProgress.status);
    }
  }, [statusProgress]);

我尝试了嵌套IFIF ELSE,但效果是一样的。

【问题讨论】:

  • 功能是什么?您是否刚刚从函数中删除了 if 部分?缩进和大括号真的很混乱

标签: reactjs typescript react-redux


【解决方案1】:

您可以继续获取数据,直到status !== 'finished'。比如:

useEffect(() => {
  if (responseId && status !== 'finished') {
     dispatch(fetchStatus(responseId));
  }
  else if(status === 'finished') {
     console.log('finished');
  }
}, [responseId, status]);

每次status 和/或responseId 更改值时都会执行此useEffect

我使用了useEffect,因为我总是避免直接在组件的主体中编写代码(因为无法知道代码将执行多少次以及何时执行)。

【讨论】:

  • 它似乎可以工作,但它总共只打了 3 次电话然后就停止了。它不会进入ELSE IF 语句
  • @PandaMastr 很可能是因为您没有设置 status...
  • 服务器已停止。它是这样工作的。如果我想加强论点,我可以做类似if (fileSelected && status !== 'finished' && processed !== total ) 然后else if (status === 'finished' && processed == total)
猜你喜欢
  • 2020-01-25
  • 1970-01-01
  • 2021-01-15
  • 1970-01-01
  • 2017-10-18
  • 1970-01-01
  • 1970-01-01
  • 2016-10-30
  • 1970-01-01
相关资源
最近更新 更多