javascript - 通过 id 反应私有路由
问题描述
所以我PrivateRoute
在 React 中使用来服务一些组件。在我指定如下的确切路径之前,一切都运行良好:
<PrivateRoute exact path="/info/:id" render={(props) => <BookInfo {...props} />} />
如果我正常使用上述路径,则可以正常使用Route
,但路由虽然PrivateRoute
给了我以下错误。
PrivateRoute.js
import React from 'react'
import { Route, Redirect } from 'react-router-dom';
import { connect } from 'react-redux';
const PrivateRoute = ({ component: Component, auth, ...rest}) => (
<Route {...rest} render={ props =>
auth.isAuthenticated === true ?
(<Component {...props}/>) : (<Redirect to ='/login'/>)}/>
)
const mapStateToProps = state => ({
auth: state.auth
})
export default connect (mapStateToProps)(PrivateRoute);
我不知道是什么原因造成的,非常感谢一些帮助。
解决方案
问题
您的PrivateRoute
组件期望component
传递一个道具,它不处理Route
组件处理的其他道具。
const PrivateRoute = ({
component: Component, // <-- only handles component prop
auth, ...rest
}) => (
<Route {...rest} render={ props =>
auth.isAuthenticated === true ?
(<Component {...props}/>) : (<Redirect to ='/login'/>)}/>
)
解决方案
BookInfo
将您的道具传递给component
道具,使其通过管道。
<PrivateRoute exact path="/info/:id" component={BookInfo} />
重构您的PrivateRoute
组件以呈现Route
带有传递给它的所有道具的 a 或Redirect
组件。
const PrivateRoute = ({ auth, ...props }) => auth.isAuthenticated ? (
<Route {...props} />
) : (
<Redirect to ='/login'/>
);
推荐阅读
- ruby-on-rails - 如何使用 devise gem 找到 Rails 应用程序的 true_user 定义?
- python - 使用 Python 和 Selenium 抓取 Bet365 赔率的问题
- javascript - 为什么我的 React Router 组件采用了错误的样式?
- dart - 在 Dart 的可选参数构造函数中使用构造函数初始化成员
- android - 该文件在设备上的什么位置?
- java - 通过在 lambda 中包含某个字符来对数组中的字符串进行排序——使用 contains?
- ios - Xcode Erroe 'MessagingRemoteMessage' 的 Firebase 云消息传递已弃用:FCM 直接通道已弃用
- user-interface - 在没有 X11 的 CI 服务上运行 GUI 应用程序
- python - 如何使用 Pandas 在 Python 中计算组和
- node.js - npm install 失败并出现 python 模块错误