我正在开发一个使用以下架构的React应用程序:
reduxtypesafe-actionsredux-observable我的问题是:如何对特定的redux操作执行UI操作?
例如,假设我们使用typesafe-actions定义了以下异步操作
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。我想要做的正是上面的文章所描述的事情,但以反应/还原--可观察的方式:
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();
}
}发布于 2019-03-27 19:26:15
使用redux,组件基于状态进行更新。
如果要根据操作更新组件,而不是更新还原程序中的状态,例如在还原程序中设置{...state : true}。从这里开始,您只需像往常一样将状态读入组件中,如果状态更改为成功,则显示窗口。
发布于 2019-06-29 12:00:12
可能有点晚了,但我通过创建一个小小的npm模块解决了一个类似的问题。它允许您订阅和侦听redux操作,并在状态更改完成后立即执行提供的回调函数。用法如下。在componentWillMount或componentDidMount钩子中:
subscribeToWatcher(this,[
{
action:"SOME_ACTION",
callback:()=>{
console.log("Callback Working");
},
onStateChange:true
},
]);详细的文档可以在https://www.npmjs.com/package/redux-action-watcher找到
发布于 2019-11-18 23:28:27
我觉得对话应该是个副作用,所以你可以把它们放进史诗里
https://stackoverflow.com/questions/55384606
复制相似问题