如何访问减速器(redux-router)中的当前位置?

Posted

技术标签:

【中文标题】如何访问减速器(redux-router)中的当前位置?【英文标题】:How to access current location in reducer (redux-router)? 【发布时间】:2016-10-31 05:57:05 【问题描述】:

如何在 reducer 中使用 redux-router 获取当前路径和当前位置的查询。我可以使用 mapStateToProps 在组件内轻松获取路径名,但我想访问减速器中的当前路径。我正在使用 redux-router 1.0.0-beta7,react-router 1.0.3。

【问题讨论】:

也许你可以通过action creater将路径名传递给reducer? 为什么要复制当前路径的“真实来源”?如果您需要访问当前路径,只需从props 获取它,因为router 会自动传递。 Router 是路由定位的真实来源,不需要在 redux 中重复这个。如果您需要从作者 Redux 那里听到它,请观看:egghead.io/lessons/… redux-router 是这样工作的 【参考方案1】:

1.way - 通过 redux-thunk 和 getState() 传递具有特定 actionpathname p>

const someAction = data =>(dispatch,getState)=>
   dispatch(
      type:'SOME_ACTION',
      pathname:getState().router.pathname
   )

2.way - 编写中间件并在每个操作中传递 路径名

///write middleware
export const attachPathNameToAction = store => next => action=>
    action.pathname = store.getState().router.pathname //<-----passing pathname
    next(action)
;


///then in reducer you allways can get pathname
case 'SOME_ACTION':
    let pathname = action.pathname \\  <-------------
    return ...state, action.data

3.way - 从组件的 this.props.location.pathname 传递路径名

//in component 
let pathname= this.props.location;
this.props.someAction(data, pathname);

//workflow:  component -> action -> reducer

【讨论】:

中间件解决方案很棒!感谢那。我真的很想知道为什么他们没有插件。 请注意,它是... .router.location.pathname,而不是... .router.pathname

以上是关于如何访问减速器(redux-router)中的当前位置?的主要内容,如果未能解决你的问题,请参考以下文章

从不同的减速器访问减速器?

使用 Redux-Router + React-Router 将基本 URL 添加到应用程序

Hadoop MapReduce访问减速器中的映射器输出编号

有没有网络加速器?

小牛加速器需要用到的权限

如何在 Hadoop MapReduce 的 Java 实现中创建全局变量?