在 React 中,我们都必须使用 useEffect Hook,它在执行 DOM 更新后运行,并帮助我们在渲染后执行一些操作。在探索在 useEffect 中进行异步调用的不同方法之前,让我们讨论一下它背后的问题。
不能在useEffect中直接使用async,为什么?
上面这段代码会直接报错,因为 async 函数返回 promise,而 useEffect 不允许回调函数返回 promise。 实际上它不应该返回任何内容。
如何解决这个问题?
- 在useEffect内部定义async函数
- 使用useCallback在外部定义,然后进行调用。
在这种情况下,我们需要将我们的异步函数包装在 useCallback 中以将其映射到useEffect依赖数组。
注意 - 如果我们不使用 useCallback Hook包装函数,它将在每次更新时重新渲染,这将导致再次触发 useEffect 钩子。
以上介绍了在useEffect中使用async函数的两种方法。其实,react中有第三方库,可以更好的解决async的问题,比如react-use中的useAsync,用起来也特别方便。大家有兴趣可以尝试一下。