我正在尝试在调度操作时更改URL参数。它链接到下一个" case"在实验中,并在URL中显示为整数。
我怎么想这个:
初始网址/experiment/2
调度的行动{ type: 'NEXT_CASE' }
新网址/experiment/3
研究
基于this answer(虽然大约redux-router
)我知道我可以通过访问store.getState().routing
来检索reducer中的当前路径/ URL。
但是我想要在我的路线中定义和解析的参数。 (我显然可以从路径中手动解析它们,但是如果路径结构发生变化,这看起来似乎不具备可扩展性并且不会出现以后的情况。)
当前解决方案
到目前为止,我最好的尝试是基于match(他们说这不是用于客户端使用):
export default store => next => (action:Action<any>) => {
if (action.type == Types.NEXT_CASE) {
match(
{ routes: Routes, location: store.getState().routing.locationBeforeTransitions.pathname },
(error, redirectLocation, renderProps: any) => browserHistory.push(RouteBuilder.experiment(parseInt(renderProps.params.caseIndex) + 1))
);
}
return next(action);
}
Routes
和RouteBuilder
定义如下:
export const RouteBuilder = {
experiment: (caseIndex: number) => `/experiment/${ caseIndex }`
};
export const Routes = (
<Route path="/" component={ Root }>
<IndexRoute component={ Welcome } />
<Route path="experiment/:caseIndex" component={ Experiment } />
</Route>
);
问题
有没有直接的方法来检索reducer中的当前路由(已解析和命名)参数?