访问 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 一起使用的主要内容,如果未能解决你的问题,请参考以下文章
redux store dispatch 导致 React 中的 setState error()
vuex中 this.$store.dispatch() 与 this.$store.commit()方法的区别