【发布时间】:2020-08-01 20:14:40
【问题描述】:
我正在寻找在我的应用中处理获取状态的最佳方式, 最简单的方法是为每个操作创建一个 isFetching[actionName],然后状态将如下所示:
state:{
todos:[...],
user[...],
isTodosFetching:true/false,
isUserFetching:true/false
}
但我正在寻找一种更优雅的方式在商店中存储获取状态。
所以我尝试了另一种方法并考虑创建一个 fetchingActionsReducer 它将每个获取操作添加到存储中的 dict(object) 中,然后状态将如下所示:
todos:[...],
user[...],
loadingTasks:{
isTodosFetching:true/false,
isUserFetching:true/false
}}```
now every component will get loadingTasks with mapStateToProps and that's it.
this will reduce the boilerplate to one simple reducer and one action.
reducer:
export const loadingTasks = (state = {}, action) => { 开关(动作类型){ 案例 START_LOADING_TASK: 返回 Object.assign({}, state, { [action.payload]: true }); 案例 END_LOADING_TASK: 返回 Object.assign({}, state, { [action.payload]: false }); 默认: 返回状态; } };
actions:
export const startLoadingTask = (taskName) => ({ 类型:START_LOADING_TASK, 有效载荷:任务名称, });
export const endLoadingTask = (taskName) => ({ 类型:END_LOADING_TASK, 有效载荷:任务名称, });```
我试过了,效果很好,但我想知道,
1. 有没有更好的方法来处理使用redux 获取状态?
2. 现在很多作品集都会订阅 loadingTasks 状态,恐怕会导致性能问题。 (对于加载任务的每一次变化,所有反应都会为所有订阅的组件运行挖掘算法)
【问题讨论】:
-
你能看看这个question好吗?我已经解释了如何利用
redux进行条件渲染。
标签: reactjs redux react-redux