我想利用 react-router 的 onEnter
处理程序来提示用户在进入受限路由时进行身份验证。
到目前为止,我的 routes.js
文件看起来像这样:
import React from 'react';
import { Route, IndexRoute } from 'react-router';
export default (
<Route path="/" component={App}>
<IndexRoute component={Landing} />
<Route path="learn" component={Learn} />
<Route path="about" component={About} />
<Route path="downloads" component={Downloads} onEnter={requireAuth} />
</Route>
)
理想情况下,我希望我的 requireAuth
函数是一个可以访问商店和当前状态的 redux 操作,其工作方式如下: store.dispatch(requireAuth())
。
不幸的是,我无权访问此文件中的商店。我不认为我可以真正使用 connect
在这种情况下访问我想要的相关操作。我也不能只从创建商店的文件中获取 import store
,因为当应用首次加载时这是未定义的。
原文由 robinnnnn 发布,翻译遵循 CC BY-SA 4.0 许可协议
完成此操作的最简单方法是将您的商店传递给返回您的路线的函数(而不是直接返回您的路线)。通过这种方式,您可以访问
onEnter
中的商店和其他反应路由器方法。所以对于你的路线:
然后更新您的主要组件以调用
getRoutes
函数,传入商店:至于从
requireAuth
调度一个动作,你可以这样写你的函数:希望这可以帮助。