访问 saga 中的 store.dispatch 以与 react router redux 一起使用

Posted

技术标签:

【中文标题】访问 saga 中的 store.dispatch 以与 react router redux 一起使用【英文标题】:Access to store.dispatch in a saga for use with react router redux 【发布时间】:2017-11-24 21:04:09 【问题描述】:

由于重大更改,我目前正在重构 react + redux + saga + react-router 3 应用程序以使用新的 react-router 4。在我使用 browserHistory 根据 saga 的结果定向到适当的路径之前。由于 react-router 4 的变化,我不能再使用 browserHistory 了。

现在我已经合并了 react-router-redux 来完成 browserHistory 所做的工作。问题是 react-router-redux 只能在 store.dispatch 中工作,例如store.dispatch(push('/'))。我似乎无法找到一种方法来访问我的 sagas 中的商店或它的调度功能。关于如何在传奇中访问 store.dispatch 的任何想法?我知道你可以在根 saga 中传递参数,但我不知道如何在我的实际 saga 中检索它们。

【问题讨论】:

【参考方案1】:

使用 redux-saga 的 put 效果,它将 redux 操作分派到商店 - docs。

import  call, put  from 'redux-saga/effects'
// ...

function* fetchProducts() 
  const products = yield call(Api.fetch, '/products')
  // create and yield a dispatch Effect
  yield put( type: 'PRODUCTS_RECEIVED', products )

【讨论】:

我需要做这样的事情: const error = yield call(saveAccount) if (error) yield put(accountSaveFailed(error)) else yield put(dispatch(push(' /详情'))) put 是 dispatch + yield。您只需要yield put((push('/details'))(其余条件保持不变)。

以上是关于访问 saga 中的 store.dispatch 以与 react router redux 一起使用的主要内容,如果未能解决你的问题,请参考以下文章

VUEX中的dispatch()和commit()

redux store dispatch 导致 React 中的 setState error()

vuex 中的 dispatch 和 commit 的使用

vuex中 this.$store.dispatch() 与 this.$store.commit()方法的区别

Redux Persist TypeError:store.dispatch 不是函数

根据 vuex 的 this.$store.dispatch() 返回值 处理逻辑