首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >除了epic之外,有没有办法访问路由器历史记录?

除了epic之外,有没有办法访问路由器历史记录?
EN

Stack Overflow用户
提问于 2017-11-29 17:27:56
回答 2查看 1.2K关注 0票数 0

我使用的是react-router-4,这个版本对应的react-router-redux还不稳定。我很好奇是否有从redux-observable epic访问history的方法。示例:

代码语言:javascript
复制
export function profileDropdownEpic (action$, { getState, dispatch }{
  return action$.ofType('SET_SELECTED_ITEM')
    .mapTo(() => {
      const selectedItem = getState().listDropdown.get('SelectedItem')
      if (selectedItem === 'logout') {
        history.push('/login')
      }  
      return {}
    })
}
EN

回答 2

Stack Overflow用户

发布于 2019-08-05 21:06:39

在使用epics时,您希望将History作为EpicMiddleware的依赖项包括在内。依赖项作为第三个参数添加到每个史诗中。

从创建历史开始。

代码语言:javascript
复制
import { createBrowserHistory } from 'history';
const history = createBrowserHistory();

创建依赖项时,将history作为依赖项对象的参数传递:

代码语言:javascript
复制
createEpicMiddleware({
  dependencies: { 
    history: history
  }
})

在创建实际的Epic时,第三个参数包含依赖项,其中一个将是history

代码语言:javascript
复制
const myEpic = (action, store, dependencies) => {
  // dependency.history.createHref(...)

  return action.pipe(...)
}

combineEpics(myEpic);
票数 1
EN

Stack Overflow用户

发布于 2017-11-29 21:16:02

创建导出createHistory()history.js文件

代码语言:javascript
复制
// history.js
import createHistory from 'history/createBrowserHistory'
export default createHistory()

然后把它导入你的史诗中:

代码语言:javascript
复制
// epics.js
import history from './history'     

export function profileDropdownEpic (action$, { getState, dispatch }){
  return action$.ofType('SET_SELECTED_ITEM')
    .mapTo(() => {
      const selectedItem = getState().listDropdown.get('SelectedItem')
      if (selectedItem === 'logout') {
        history.push('/login')
      }  
      return {}
  })
}

别忘了在你的<Router />中设置历史道具

代码语言:javascript
复制
import history from './history'

<Router history={history}>...</Router>
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47549245

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档