当前位置: 首页 > 知识库问答 >
问题:

React+Redux:如何等待操作完成然后重定向

万高洁
2023-03-14

我是一个新的反应,但我已经工作了很多年的Vue。当我需要等待一个动作完成时,我现在被困在一个区域。在操作完成后,我必须进行另一个操作调用或在那里执行一些操作。但它不会等待操作完成并开始执行下面的代码。

方法:

export const login = (email, password) => async (dispatch) => {
  try {
    dispatch({
      type: USER_LOGIN_REQUEST,
    })

    const config = {
      headers: {
        'Content-Type': 'application/json',
      },
    }

    const { data } = await axios.post(
      '/users/login',
      { email, password },
      config
    )

    dispatch({
      type: USER_LOGIN_SUCCESS,
      payload: data,
    })

    localStorage.setItem('userInfo', JSON.stringify(data))
  } catch (error) {
    dispatch({
      type: USER_LOGIN_FAIL,
      payload:
        error.response && error.response.data.message
          ? error.response.data.message
          : error.message,
    })
  }
}

从其中调度操作的方法:

const redirect = location.search ? location.search.split('=')[1] : '/'

const submitHandler = (e) => {
  e.preventDefault()
  dispatch(login(email, password))
  history.push(redirect)
}

现在,在上面的代码中,重定向并不是在等待调度完成。我试过这个,但它不起作用:

const submitHandler = async (e) => {
  e.preventDefault()
  await dispatch(login(email, password))
  history.push(redirect)
}

共有1个答案

裴鸿熙
2023-03-14

让我们假设当下面的

dispatch({
      type: USER_LOGIN_SUCCESS,
      payload: data,
    })

您的ReduxState具有某种属性,如IsLoggedInIsAuthenticated。现在,您可以使用相同的属性触发UseEffect内部的Redirection,如下所示:-

const {isAuthenticated} = reduxState;
useEffect(()=>{
if(isAuthenticated) history.push(redirect);
},[isAuthenticated])

您的submithandler可以是以下内容:-

const submitHandler = (e) => {
  e.preventDefault()
  dispatch(login(email, password))
}
 类似资料:
  • 我有一个redux saga设置,工作正常。我的一个分派任务是创建一个新订单,然后一旦创建了订单,我就想用更新后的状态做一些事情。 由于 createOrder 操作触发调用 API 的重订传奇,因此存在延迟,因此在我的函数 do 之前不会更新此 .props.user 命令某些内容被调用。我可以设置一个超时,但这似乎不是一个可持续的想法。 我已经阅读了有关Stack Overflow的类似问题,

  • 当集合中的文档存在或不存在时,我想返回True或False。但它总是返回错误。 我还在学习,谢谢你的帮助。

  • 问题内容: 我看过许多使用这种语法的示例,但是看不到我做错了什么。“ then”函数在ajax调用返回之前正在运行。 我也尝试过使用$ .deferred和其他一些模式无济于事。 有人可以看到我所缺少的吗? 我已经调试,可以看到在ajax调用返回其成功(或错误)数据之前,已完成/然后内部进行的调用。 谢谢你的帮助。 主要电话: 它正在调用以下ajax函数: 谢谢! 验尸: 除了将返回值添加到aja

  • 问题内容: 我的问题: 如何在a上执行一堆线程对象并等待它们全部完成后再继续? 我是ThreadPoolExecutor的新手。因此,此代码是测试以了解其工作方式。现在我什至都不用对象填充,因为我不理解如何在不调用另一个队列的情况下开始队列。无论如何,现在我只是打电话给我,但我认为我仍然缺少一些东西。任何提示都很棒!谢谢。 RunnableObject类: 问题答案: 你应该循环

  • 问题内容: 我不确定如何处理这种情况,因为我是iOS开发和Swift的新手。我正在像这样执行数据获取: 我的loadShows()函数解析从加载到UIWebView的网站中获取的大量数据。问题是我在loadShows函数中有一个等待10秒钟左右的计时器。这允许页面中的javascript在开始解析数据之前完全加载。我的问题是完成处理程序在我的loadShows()之前完成。 我想做的是为“ isC

  • 我正在Eclipse中使用Java运行selenium RC。我遇到的问题是selenium.click命令。我点击的链接加载一个新页面。有时需要5秒,有时需要2-3分钟。每次我看到页面加载时,在我的测试失败后,我立即得到消息“Timed out waiting for action to finish”。 我尝试使用Selenium.IsElementPresent检查正在加载的页面。但是,当我