当前位置: 首页 > 知识库问答 >
问题:

在redux中处理获取状态的最佳方法

熊俊人
2023-03-14
state:{
todos:[...],
user[...],
isTodosFetching:true/false,
isUserFetching:true/false
}

但我正在寻找一种更优雅的方式来存储存储中的获取状态。

因此,我尝试了另一种方法,并考虑创建一个fetchingActionsReducer,它将每个提取操作添加到存储中的dict(对象),然后状态如下所示:

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:

导出常量loadingTasks=(state={},action)=>{switch(action.type){case start_loading_task:return object.assign({},state,{[action.payload]:true});case end_loading_task:return object.assign({},state,{[action.payload]:false});default:return state;}};

actions:

导出常量startLoadingTask=(taskName)=>({type:START_LOADING_TASK,payload:taskName,});

导出常量endLoadingTask=(taskName)=>({type:END_LOADING_TASK,payload:taskName,});```

我尝试了它的工作完美,但我想知道,
1。有什么更好的方法来处理Redux的获取状态?2.现在许多投资组合将订阅到loadingTasks状态,我担心这会导致性能问题。(对于加载任务中的每一次更改,all react都将为所有订阅的组件运行挖掘算法)

共有1个答案

林子石
2023-03-14

我建议将获取状态与被请求的资源放在一起,例如:

state:{
  todos: {
    isFetching: true, // or false
    data: [/* ... */]
  },
  user: {
    isFetching: true, // or false
    data: [/* ... */]
  }
}

这样,当todos的获取状态发生变化时,只会重新生成依赖于todos的组件。

这种方法还支持附加状态。

state:{
  todos: {
    isFetching: false,
    hasError: true, // or false
    data: [/* ... */]
  },
  user: {
    isFetching: false,
    errorMessage: 'Please check username exists', // or null
    data: [/* ... */]
  }
}
 类似资料:
  • 问题内容: 我有一个针对客户的减速器,另一个针对AppToolbar的减速器,还有一些其他的减速器… 现在让我们说我创建了一个删除客户端的提取操作,如果失败,我在Clients reducer中会有代码,该代码应该做一些事情,但是我也想在AppToolbar中显示一些全局错误。 但是客户端和AppToolbar减速器不共享状态的同一部分,因此我无法在减速器中创建新的动作。 那么我应该如何显示全局错

  • 接口说明 获取素材最新处理状态 如需调用,请访问 开发者文档 来查看详细的接口使用说明 该接口仅开放给已获取SDK的开发者 API地址 GET /wish3dearth/api/material/v1.0.0/getMaterialStatus 是否需要登录 是 请求字段说明 参数 类型 请求类型 是否必须 说明 token string header 是 当前登录用户的TOKEN materia

  • 接口说明 获取素材最新处理状态 如需调用,请访问 开发者文档 来查看详细的接口使用说明 该接口仅开放给已获取SDK的开发者 如开启https功能,请求地址的协议应改为https,如:https://www.example.com/wish3dearth/api/access/v1.0.0/getLicenseInfo API地址 GET /wish3dearth/api/material/v1.0

  • 问题内容: 我得到了一种用于创建,读取,更新和删除的表单。我用相同的形式创建了3个组件,但它们传递了不同的道具。我得到了CreateForm.js,ViewForm.js(带有删除按钮的只读)和UpdateForm.js。 我以前使用过PHP,所以我总是以一种形式进行操作。 我使用React和Redux来管理商店。 当我进入CreateForm组件时,我将这些道具传递给子组件,以使其不使用值填充输

  • 问题内容: 我目前在tensorflow中具有一系列链接在一​​起的RNN的以下代码。我不使用MultiRNN,因为稍后我将对每个图层的输出进行处理。 目前,我有固定的时间步数。但是,我想将其更改为只有一个时间步长,但要记住批次之间的状态。因此,我需要为每个层创建一个状态变量,并将其分配给每个层的最终状态。这样的事情。 然后,对于每一层,我都需要评估sess.run函数中的保存状态以及调用训练函数

  • 问题内容: 我必须在php中解析大型XML文件,其中之一是6.5 MB,它们甚至可能更大。如我所读,SimpleXML扩展将整个文件加载到一个对象中,这可能不是很有效。以您的经验,最好的方法是什么? 问题答案: 对于大文件,您将要使用SAX解析器而不是DOM解析器。 使用DOM解析器,它将读取整个文件并将其加载到内存中的对象树中。使用SAX解析器,它将顺序读取文件并调用用户定义的回调函数来处理数据