javascript - React Router Dom,useNavigate 不重定向到正确的 url 路径

标签 javascript reactjs react-router react-router-dom

在较旧的 React Router Dom 版本中,如果用户已登录,我可以使用此代码进行重定向:

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

现在在 v6 中,我正在使用 useNavigate 函数而不是 history.push 但它不起作用,因为它将我带到 /login/shipping 而不是 /shipping。目前这是我的导航代码:

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

这是我的路由器配置:

<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 - React Router Dom,useNavigate 不重定向到正确的 url 路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73248482/

相关文章:

react-native - 与 ionic 框架 react 的导航问题

javascript - ReactJS 服务器端渲染和 componentDidMount 方法

javascript - Jest 中语句覆盖率和行覆盖率的区别

javascript - 使用 jQuery .html 插入 javascript

javascript - 当状态更新不影响 UI 时防止 "not wrapped in act(...)"Jest 警告

javascript - Dailymotion 视频自动播放和静音

javascript - 如何使用 React Native 设置 Sublime 3,以便当您单击错误并跳转到您的代码时?

Javascript 为画廊创建过滤器

javascript - 在 props 上使用 typeof 会导致 TypeError

javascript - 如何使用 webpack 服务器端处理静态 Assets ?