react-router-redux – 如何为saga提供历史实例?
发布时间:2020-12-15 20:19:42 所属栏目:百科 来源:网络整理
导读:我想在成功登录后重定向到新页面. 路线(V4)使用如下: import { browserHistory } from '....browser_history_signleton';...class App extends Component { render() { const { authentication: { isSignedIn } } = this.props; return ( ConnectedRouter h
我想在成功登录后重定向到新页面.
路线(V4)使用如下: import { browserHistory } from '....browser_history_signleton'; ... class App extends Component { render() { const { authentication: { isSignedIn } } = this.props; return ( <ConnectedRouter history={browserHistory}> <div> <Header/> <Route exact path="/" component={Home}/> <PrivateRoute isAuthorized={isSignedIn} path="/page1" component={PageOne}/> <PrivateRoute isAuthorized={isSignedIn} path="/page2" component={PageTwo}/> </div> </ConnectedRouter> ); } } 传奇看起来像: import { browserHistory } from '....browser_history_signleton'; export function* loginSaga() { while (true) { // eslint-disable-line no-constant-condition try { const payload = yield take(LOGIN_SUBMIT); const raceResult = yield race({ signin: call(loginRequest,payload),logout: take('LOGOUT') }); if (raceResult.signin) { const { data } = raceResult.signin; yield put(loginRequestSucceeded(data)); const redirectUrl = `.....based on location.state.from.pathname` browserHistory.push(rediretUrl); ... 我的主要问题是如何共享browserHistory. // browser_history_signleton.js import createHistory from 'history/createBrowserHistory'; export const browserHistory = createHistory(); 为历史实例提供历史实例的最有效方法是什么? 解决方法
正如您所指出的那样,将历史直接作为单身人士提供是一种选择.另一种类似的(如果没有争议的)方法是将历史添加到redux状态.因此,在您的传奇中,您将使用选择效果来获取历史记录实例.
这两种方法都有效地将历史视为单例,但通过将其存储到redux状态,您可以在单元测试中更轻松地模拟历史对象.更简单的意思是你可以使用相同的技术来模拟历史对象,就像模拟redux状态中的任何其他对象一样. 此外,您可能会将历史对象与其他初始状态一起实例化,因此初始化历史记录的逻辑不会是关于如何初始化应用程序状态的一次性异常. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |