reactjs - Redux action creator 完成,更新订阅的组件
问题描述
我的页面上有一个属性组件。它以模式打开,并更改 redux 存储中的属性,最显着的是要在搜索结果中显示的一些项目。我还有一个叫做 Search 的组件,它基本上使用 redux 存储来更新自己。我正在努力的是,我需要知道项目数量的动作创建者何时完成,通知我的搜索它已经完成了这个动作,所以我可以使用新的项目数量变量执行搜索。
过去我会使用 componentWillRecieveProps 并只检查更改,但已经消失了,取而代之的是 getDerivedStateFromProps。这似乎是我可以采用的一种方式,但我也考虑过使用 RXJS 来调用 observables,但我看不到任何示例可以完成我特别想要完成的工作(动作创建者完成的通知)。有人有同样的问题吗?RXJS 与 getDerivedStateFromProps 哪种方法更好?我也在使用 redux-thunk,但我看不到以任何方式将订阅绑定到动作创建者的方法。提前致谢。
编辑:示例代码动作创建者:
export function setNumRecords(val){
return dispatch => {
localStorage.setItem('numRecords', val);
dispatch({type: 'SET_NUM_RECORDS', numRecords:val})
};
}
调度完成后,我希望更新搜索组件。我不确定还需要多少代码。
解决方案
要将 redux observable 设置为应用程序中的中间件:
https://redux-observable.js.org/docs/basics/SettingUpTheMiddleware.html
然后在你的根史诗中,你可以听你的动作:
import { ofType } from 'redux-observable';
import {
tap,
mapTo,
} from 'rxjs/operators';
const setNumRecordsEpic = action$ => action$.pipe(
ofType('SET_NUM_RECORDS'),
tap(() => console.log('Here...'))
mapTo({ type: 'SOME_OTHER_ACTION' })
);
推荐阅读
- java - 为什么子方法在主方法中找不到符号?
- php - 无法接收从 Vue 通过 axios 发送到 PHP 的 Post 数据
- vb.net - 将未过滤的文本放入文本框中
- sharepoint - 如何根据文件名获取文档库中新上传文件的ID?PNP JS
- node.js - 如何将字符串添加到集合中的数组 | MongoDB | 节点JS
- algorithm - 查找单链表的第 k 个最后一个元素:答案解释
- javascript - 与 JavaScript 中的变量赋值一样,一次性为一个对象分配多个值
- webgl - 动态收缩缓冲区
- html - 如果 Markdown 是 HTML 的超集,那为什么它不能做 HTML 能做的所有事情呢?
- tensorflow - 将预训练模型生成的预测输出解码为人类可读的标签