首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >UseEffect异步操作

UseEffect异步操作
EN

Stack Overflow用户
提问于 2021-12-14 12:04:02
回答 2查看 890关注 0票数 1

在我的useEffect钩子中,我有一些API请求,比如:

代码语言:javascript
复制
useEffect(() => {
    dispatch(action1());
    dispatch(action2());
    dispatch(action3());
}, []);

如何利用异步/等待函数在钩子内部使用“last”参数,在发出第一次请求之前加载为true,在最后发出请求后作为false加载。比如:

代码语言:javascript
复制
const [loading, setLoading] = useState(false);

useEffect(() => {
    setLoading(true);
    dispatch(action1());
    dispatch(action2());
    dispatch(action3());
    setLoading(false);
}, []);
EN

回答 2

Stack Overflow用户

发布于 2021-12-14 12:12:23

你可以这样做:

代码语言:javascript
复制
const [loading, setLoading] = useState(false);

useEffect(() => {
  async function fetchData() {
    setLoading(true);
    await dispatch(action1());
    await dispatch(action2());
    await dispatch(action3());
    setLoading(false);
  }
  fetchData()
}, []);

阅读更多关于useEffectasyncReact Hook Warnings for async function in useEffect: useEffect function must return a cleanup function or nothing的信息

票数 1
EN

Stack Overflow用户

发布于 2021-12-14 12:28:00

我总是创建一个自定义钩子,并将其用于API调用和redux调度。看看这个可能会有帮助。

代码语言:javascript
复制
const useAction = () => {
  const dispatch = useDispatch();
  const [loading, setLoading] = useState(false);

  const fetchData = async (params) => {
    setLoading(true);
    try {
      // do something
      // await call api
      dispatch(action1());
      dispatch(action2());
      dispatch(action3());
    } catch (error) {
    } finally {
      setLoading(false);
    }
  };

  return { fetchData, loading };
};

// Component
const { fetchData, loading } = useAction();
useEffect(() => {
  fetchData(params);
}, []);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70348570

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档