首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >redux-saga根据UI组件状态有条件地订阅工作人员

redux-saga根据UI组件状态有条件地订阅工作人员
EN

Stack Overflow用户
提问于 2018-08-10 01:47:09
回答 2查看 816关注 0票数 2

我有一个全局通用UI按钮组件(<ButtonRefresh />),它存在于基本UI组件<ApplicationBase />中。假设我在ApplicationBase中有子组件,这些组件根据路由(如:HomePageUserDetailPageProductsPageProductDetailPage等)呈现。在这些页面中可以有任意数量的其他组件,如UserEntityProductEntityProductEntityList等。

所有这些组件都应该能够实现自己的数据检索/显示逻辑。

当单击刷新按钮时,它会发出一个操作:APP_REFRESH。我有一个redux-传奇,它监视这个动作,并做一些背景工作(网络呼叫):

function* appRefreshWatcher() { yield takeEvery(APP_REFRESH, appRefreshWorker); }

我的问题是,需要完成的后台工作取决于当前安装子组件的位置。我不想重新加载数据或更新没有显示的实体。

理想情况下,每个组件都能够侦听APP_REFRESH 操作,并运行自己的刷新工作人员saga - ,但只有在mounted.时才能这样做。

如何才能“刷新”仅活动(挂载)的组件?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-08-12 20:26:32

你看过react-boilerplate回购的方法吗?https://github.com/react-boilerplate/react-boilerplate

您可以使用withSaga方法在组件旁边动态注入(并弹出) sagas。当组件挂载或卸载时,sagas被注入并从存储中弹出。这是一种与withReducer类似的recompose方法。回购中的示例:https://github.com/react-boilerplate/react-boilerplate/blob/master/app/containers/HomePage/index.js#L132

检查注入实现:https://github.com/react-boilerplate/react-boilerplate/blob/master/app/utils/injectSaga.js#L28。特别是关于HOC的componentWillMountcomponentWillUnmount方法。

我认为您可以通过这种函数式编程方法来完成您想要的任务。

票数 1
EN

Stack Overflow用户

发布于 2018-08-10 02:28:40

您可以使用反应-还原-路由器保存有关存储中当前路由的数据。

然后,您可以在选择中对数据进行appRefreshWorker,以便有条件地刷新数据。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51777809

复制
相关文章

相似问题

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