[英]Pass props using <Navigate /> (react-router-dom v6)
我正在为需要身份验证的组件使用 ProtectedRoute(工作正常)。 现在我想在将用户重定向到 loginForm 之前获取位置,如下所示:
import React from 'react'
import auth from '../../services/authService'
import { Navigate, useLocation } from 'react-router-dom'
const ProtectedRoute = ({ children }) => {
const location = useLocation()
return auth.getUser() ? (
children
) : (
<Navigate to='/login' state={{ from: location }} replace/>
)
}
export default ProtectedRoute
这里是 App.js 中对应的路由
<Route path='/login' element={<LoginForm />} />
<Route
path='/movies/:id'
element={
<ProtectedRoute>
<MovieForm />
</ProtectedRoute>
}
/>
在 loginForm.jsx 内部(这是一个 class 组件)
render() {
console.log('props', this.props)
return //...
}
但是 loginForm 中的 this.props 是一个空的 object。 为什么? 我现在如何访问<Navigate />
的 state 属性?
我只需要在 loginForm.jsx 中使用位置挂钩 (useLocation)(这是一个 class 组件,所以我不得不使用一个技巧来使用其中的挂钩)
import React, { Component } from 'react'
import { useLocation } from 'react-router-dom'
let location
const UseLocation = () => {
location = useLocation()
return null
}
class LoginForm extends Component {
submitForm() {
console.log('returnUrl', location.state.from.pathname)
}
render() {
return <UseLocation />
}
}
export default LoginForm
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.