在较早的Reaction版本中,如果用户登录,我可以使用此代码重定向:

history.push('/login?redirect=shipping')

现在在v6中,我使用的是useNavigate函数,而不是history.push函数,但我不知道如何判断用户是否使用导航登录,如果您需要更多我的代码来回答,请告诉我,目前这是我的导航代码:

let navigateCart = useNavigate() 
// some code here
navigateCart('/login?redirect=shipping') // the mistake is inside the parenthesis here but i dont know what it is!

这不起作用,因为它把我带到了/login/shipping而不是/shipping.

这是我的路由配置:

<BrowserRouter>
  <Container>
    <Routes>
      <Route path="/" element={<HomeScreen />} exact />
      <Route path="/login" element={<LoginScreen />} />
      <Route path="/profile" element={<ProfileScreen />} />
      <Route path="/shipping" element={<ShippingScreen />} />
    </Routes>
  </Container>
</BrowserRouter>

登录屏幕功能:

function LoginScreen() {

    let navigateLog = useNavigate()
    let location = useLocation()

    const [email, setEmail] = useState('')
    const [password, setPassword] = useState('')

    const dispatch = useDispatch()

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

    const userLogin = useSelector(state => state.userLogin)
    const { error, loading, userInfo } = userLogin


    useEffect(() => {
        if (userInfo) {
            navigateLog(redirect)
        }
    }, [navigateLog, userInfo, redirect])

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

推荐答案

LoginScreenuseEffect内的这行navigateLog(redirect)更改为这一行:

navigateLog(`/${redirect}`);

在您的例子中,它重定向到/login/shipping而不是/shipping,因为这就像您在调用navigateLog("shipping"),因为redirect等于"shipping",所以它被用作相对路径.这意味着它会考虑您当前的url,在本例中为/login.

下面是您的代码的简化版本的CodeSandbox个有效版本.

Javascript相关问答推荐

Redux工具包查询(RTKQ)端点无效并重新验证多次触发

zoom svg以适应圆

InDesign—创建一个独立的窗口,在文档中进行更正时保持打开状态

jQuery s data()[storage object]在vanilla JavaScript中?'

如何从URL获取令牌?

可更改语言的搜索栏

在Matter.js中添加从点A到另一个约束的约束

Angular 形式,从DOM中删除不会删除指定索引处的内容,但会删除最后一项

如何使用TypeScrip设置唯一属性?

如何在箭头函数中引入or子句?

当用户点击保存按钮时,如何实现任务的更改?

将对象推送到数组会导致复制

自定义图表工具提示以仅显示Y值

传递方法VS泛型对象VS事件特定对象

在查看网页时,如何使HTML中的按钮工作方式类似于鼠标上的滚轮或箭头键?

Node.js API-queryAll()中的MarkLogic数据移动

在SuperBase JS客户端中寻址JSON数据

如何使用Reaction路由导航测试挂钩?

将Windows XP转换为原始数据以在html前端中显示

与find()方法一起使用时,Mongoose中的$or运算符没有提供所有必需的数据