首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何侦听组件中的redux操作流

如何侦听组件中的redux操作流
EN

Stack Overflow用户
提问于 2019-03-27 18:55:24
回答 3查看 4K关注 0票数 4

我正在开发一个使用以下架构的React应用程序:

  • redux
  • typesafe-actions
  • redux-observable

我的问题是:如何对特定的redux操作执行UI操作?

例如,假设我们使用typesafe-actions定义了以下异步操作

代码语言:javascript
复制
export const listTodo = createAsyncAction(
  'TODO:LIST:REQUEST',
  'TODO:LIST:SUCCESS',
  'TODO:LIST:FAILURE',
)<void, Todo[], Error>();

Epic将监视listTodo.request()并发送API调用,然后将响应转换为listTodo.success()操作。然后,redux还原器将被listTodo.success()操作触发,并将todo列表存储到redux存储中。

在此设置中,假设我想在组件中执行以下操作:

  • 分派一个listTodo.request()操作以检索所有操作
  • 在异步请求完成后(即在listTodo.success()操作出现在操作流中之后),将UI重定向到第二个路径

所以我的问题是,我如何观察动作流并对listTodo.success()动作作出反应?

更新:为了避免过于具体,我们可以考虑另一种情况。在动作流中出现window.alert()后,我想简单地用listTodo.success()显示一个警告。或者仅仅是console.log(),或者任何改变本地状态的东西(而不是全局redux状态)。有什么方法可以实现吗?

更新2:有一个类似的问题here,但是对于角w/ ngrx。我想要做的正是上面的文章所描述的事情,但以反应/还原--可观察的方式:

代码语言:javascript
复制
import { Actions } from '@ngrx/effects';

@Component(...)
class SomeComponent implements OnDestroy {
    constructor(updates$: Actions) {
        updates$
            .ofType(PostActions.SAVE_POST_SUCCESS)
            .takeUntil(this.destroyed$)
            .do(() => /* hooray, success, show notification alert ect..             
            .subscribe();
    }

}
EN

回答 3

Stack Overflow用户

发布于 2019-03-27 19:26:15

使用redux,组件基于状态进行更新。

如果要根据操作更新组件,而不是更新还原程序中的状态,例如在还原程序中设置{...state : true}。从这里开始,您只需像往常一样将状态读入组件中,如果状态更改为成功,则显示窗口。

票数 0
EN

Stack Overflow用户

发布于 2019-06-29 12:00:12

可能有点晚了,但我通过创建一个小小的npm模块解决了一个类似的问题。它允许您订阅和侦听redux操作,并在状态更改完成后立即执行提供的回调函数。用法如下。在componentWillMount或componentDidMount钩子中:

代码语言:javascript
复制
 subscribeToWatcher(this,[
      {  
        action:"SOME_ACTION",
        callback:()=>{
          console.log("Callback Working");
        },
        onStateChange:true
      },
    ]);

详细的文档可以在https://www.npmjs.com/package/redux-action-watcher找到

票数 0
EN

Stack Overflow用户

发布于 2019-11-18 23:28:27

我觉得对话应该是个副作用,所以你可以把它们放进史诗里

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

https://stackoverflow.com/questions/55384606

复制
相关文章

相似问题

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