【问题标题】:How to dispatch async actions in React如何在 React 中调度异步操作
【发布时间】:2021-02-25 14:27:51
【问题描述】:

我有三个 redux 操作。您可以在下面找到它们:

export const loadUser = () => (dispatch, getState) => {
  const token = localStorage.getItem('twitter-token');
  const config = {
    headers: {
      Authorization: `Token ${token}`,
    },
  };
  axios
    .get(`${url}/api/user`, config)
    .then((res) => {
      dispatch({ type: USER_LOADED, payload: res.data });
    })
    .catch((err) => {
      dispatch({ type: USER_NOTLOADED });
    });
};
export const loadTweets = () => (dispatch, getState) => {
  const token = getState().auth.token;
  const config = {
    headers: {
      'Content-Type': 'application/json',
      Authorization: `Token ${token}`,
    },
  };
  axios
    .get(`${url}/tweet`, config)
    .then((res) => {
      dispatch({ type: TWEET_LOAD, payload: res.data });
    })
    .catch((err) => {
      dispatch({ type: ADD_ERROR, payload: err.response.data });
    });
};

最后一个

export const getComments = (id) => (dispatch, getState) => {
  const token = getState().auth.token;
  const config = {
    headers: {
      'Content-Type': 'application/json',
      Authorization: `Token ${token}`,
    },
  };
  axios
    .get(`${url}/tweet/comments/${id}`, config)
    .then((res) => {
      dispatch({ type: GET_COMMENT, payload: res.data });
    })
    .catch((err) => {
      dispatch({ type: ADD_ERROR, payload: err.response.data });
    });
};

我已经将它们全部发送到App.js

useEffect(() => {
    dispatch(loadUser());
    dispatch(loadTweets());
    dispatch(getComments('all'));
  }, [dispatch]);

但在 loadUser 结束之前,loadTweets 正在执行。我希望他们被一个人派遣。我该如何处理?你能帮帮我吗?

【问题讨论】:

  • 也许你可以等待你的 axios 请求,所以不要使用 axios.get().then().catch() ,你可以使用 const response = await axios.get('/');
  • 没有帮助,bruh

标签: reactjs asynchronous redux dispatch


【解决方案1】:

您的所有代码都遵循此示例:

export const loadUser = async () => (dispatch, getState) => {
  const token = localStorage.getItem('twitter-token');
  const config = {
    headers: {
      Authorization: `Token ${token}`,
    },
  };
  await axios.get(`${url}/api/user`, config);
};

【讨论】:

  • 我已将 then().catch() 转换为 async/await。但它仍然无法正常工作。
  • 它没有帮助bruh
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-09-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多