反应本机| useState异步等待

时间:2020-10-16 09:07:35

标签: javascript react-native hook use-state

我必须更新状态并在函数中使用它。这不会发生,因为我无法在当前系统中让它等待。它获取先前的数据并运行它。我怎么握住它?

例如,页面的最后一个值为3时为1。单击正在运行,在getReports中应为1,但是3可以工作。下一个是1,但我需要那个瞬间。

const onClick = () => {
    setReports([]);
    setPage(1);
    getReports(); <- use page and reports list
}

2 个答案:

答案 0 :(得分:2)

快速解决方案,获取先前的值,对其进行递增,并使用该新值更新状态。在下一行中,将与参数相同的递增值传递给getReports(new Value)。在这里,我们将仅使用状态来保留最后一个数字/索引。

但是,如果您只想使用状态,则不应立即调用getReports(),而可以使用useEffect来监听对状态的更改,然后在更改时调用方法。像这样:

const [page, setPage] = React.useState(0);

  React.useEffect(() => {
    getReports();
  }, [page]);

 const onClick = () => {
    setReports([]);

    setPage(1);

    // If page number is always incrementing
    setPage(page+1);
 }

答案 1 :(得分:0)

React中的设置状态是异步的。这是因为它会重新提供dom(或其部分),并且在调用setState(或一个钩子)之后的任何代码将继续照常执行。就设置状态而言,请忘记异步等待。

在您的示例中,我应该将页码传递给getReports函数。据我所知,没有必要保持数字为state。另外,对setReports([])的调用似乎也不需要,因为我认为getReports应该仍然覆盖它。