示例中提供了PrivateRoutehttps://reacttraining.com/react-router/web/example/auth-workflow 与Redux连接后不工作。
我的PrivateRoute看起来与原始版本几乎相同,但只连接到Redux,并在原始示例中使用它而不是fakeAuth。
const PrivateRoute = ({ component: Component, auth, ...rest }) => (
<Route
{...rest}
render={props =>
auth.isAuthenticated
? <Component {...props} />
: <Redirect to={{ pathname: "/login" }} />}
/>
);
PrivateRoute.propTypes = {
auth: PropTypes.object.isRequired,
component: PropTypes.func.isRequired
}
const mapStateToProps = (state, ownProps) => {
return {
auth: state.auth
}
};
export default connect(mapStateToProps)(PrivateRoute);
用法和结果:-
这是react redux中的一个已知问题,您可以在这里阅读更多有关这方面的内容。问题是,connect
HoC已经实现了shouldComponentUpdate
,这样如果道具
没有更改,包装的组件就不会重新加载。由于react router使用上下文传递路由更改,所以当路由更改时,包装的组件不会重新加载。但他们似乎要删除react redux 5.1版本中的shouldComponentUpdate
。目前,作为一种解决方法,我将一个来自路由器的道具(如this.props.match.params)传递给连接的子组件,即使我在内部不使用它。但它会使组件在每次路由更改时重新招标。
根据react路由器文档,您可以将您的connect
功能包装为withRouter
:
// before
export default connect(mapStateToProps)(Something)
// after
import { withRouter } from 'react-router-dom'
export default withRouter(connect(mapStateToProps)(Something))
这对我有用。
作为@Tharaka答案的补充,您可以将{pure:false}
传递到连接
方法,如react-redux疑难解答部分所述。
React redux在shouldComponentUpdate
hook中对道具进行了粗略的比较,以避免不必要的重新渲染。如果上下文道具发生了变化(react router),它不会对此进行检查,并假定没有任何变化。
{pure:false}
只会禁用此浅比较。
重新加载后,私人路由重定向到授权开始之前的 /login,因为初始redux状态对它们两者都是假的。 这些是路由器的日志: PrivateRoute.js:16加载:false isAuthenticated:false PrivateRoute.js:16加载:true isAuthenticated:false PrivateRoute.js:16加载:false isAuthenticate
我的react redux专用路由器不工作。它只是向我展示了我试图访问的路线的空白页。我的州没有在Redux开发工具上加载。这也可能是HashRouter的问题吗?My PrivateRoute组件: 我的应用程序,我正在包装我的路线,使其成为私人:
我在使用React路由器进行登录后重定向时遇到问题。 假设用户试图导航到但被重定向到因为他们的会话已过期。endpoint存在于PrivateRoute中。 登录后,我希望用户被引导到,但相反,他们目前只重定向到。 成功登录后,如何利用原始目的地进行重定向? 谢谢你的时间!
使用redux和反应路由器,我想访问路由指定的组件以外的组件上的路由参数。 我已经对react-router、redux和react-router-redux进行了如下设置,我想从我的redux存储访问reportId参数。 我已经尝试连接react-redux路由器来存储路由状态,但是我发现除了活动路由的完整路径之外,redux内部没有任何有用的存储。这让我可以选择从redux中的路径解析出re
以下是react router的一个示例,介绍如何为受保护的路由添加组件: https://reacttraining.com/react-router/web/example/auth-workflow 我已经尝试在我的Typescript项目中实现这个功能,使用上面的例子作为灵感。 组件/路线 连接器/专用线路 组件/专用路由 错误
我有一个简单的(目前)应用程序,使用react router和redux,我想为它添加国际化功能。 我已经安装了npm包,并且能够安装和运行提供的示例。我已经将适当的导入添加到我自己的应用程序中,并将国际化标签添加到根渲染方法中。 当我将I18nextProvider标记添加到render方法时,我得到了错误 找不到模块“react” 这并不是特别有用,尤其是因为如果我删除标签,react应用程序