redux 和 React 中减速器的先前状态

2024-06-18

这是我的减速器的样子:

export default function catalogReducer(state = initialState.catalogItems, action){
  switch (action.type) {
    case types.LOAD_CATALOG_SUCCESS:
      return {
         count:action.count,
        products :[...state['products'],
        action.catalogItems  ?
        [...action.catalogItems['products']]
          :
          []
      ]
    default:
      return state;
  }
}

我想做的事:

  1. 这是一个用于加载目录项的减速器

  2. 项目来自分页 api。

  3. 我需要将 api 的结果添加到现有列表中 产品

Problem:

我希望状态参数应该与先前的状态相关联,但不,它总是从初始状态获取值,这是我在应用程序启动时初始化状态的值。

这是为什么?有什么办法呢?

基本上我需要通过分页 api 返回完整的项目集,而不仅仅是给定页面的产品products大批。 我最终得到的只是上次 api 调用的产品数组,如下所示state.products总是被初始化为空数组

另外,一般来说,我对在 React 和 Redux 中处理分页 api 感到非常困惑,并且无法找到一个简单的例子。

一个方向将不胜感激。

这是initialState.js 文件的样子:

import cookie from 'react-cookie';

export default {
 categories:[],
  sessionId: cookie.load('sessionId') || '',
  youMayLikeItems : [],
  catalogItems: {'products': []}
}

//该文件是集中存储store中状态的初始化


基本上,您需要记住您不应该改变状态。

export default function catalogReducer(state = initialState, action) {
  switch (action.type) {
    case types.LOAD_CATALOG_SUCCESS:
      return {
        ...state,
        catalogItems: {
          count: action.count,                          
          products: [
            ...state.catalogItems['products'],
            action.catalogItems  ?
              action.catalogItems['products']
              :
              {}
          ]
        }
  default:
    return state;
  }
}

你可以找到更多有用的例子here http://redux.js.org/docs/basics/Reducers.html

另外,最好制作简单的状态(docs http://redux.js.org/docs/faq/OrganizingState.html)没有深层对象并使用 Immutable.js

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

redux 和 React 中减速器的先前状态 的相关文章

随机推荐

  • Laravel 5.0,env() 在并发请求期间返回 null

    问题是当我尝试使用获取配置变量时env setting or Config get setting 有时会返回 null 出于测试原因 我创建了一条简单的路线 Route get test function env env SETTING
  • php 中的 cpu_get_usage ?

    我创建了一个基准类 允许用户插入例如 timer gt checkpoint 1 检查一些代码的时间 内存消耗等 如果她 他想测试它 她 他必须在代码末尾插入 result timer gt result 这会向公共函数 result 提供
  • 创建电子书阅读应用程序的教程 - epub 文件格式 [重复]

    这个问题在这里已经有答案了 我正在制作一个电子书阅读应用程序 因为我想执行一些操作 例如更改文本颜色 字体 选择文本等 我知道 iphone os 4 0 和 ipad 现在支持 epub 文件格式 但我不知道如何创建此类应用程序 如果有人
  • 用于多行字符串的 ECMAScript 正则表达式

    我正在为我的应用程序编写加载过程 它涉及从文件中读取数据并创建具有适当属性的适当对象 该文件由以下格式的连续条目 以换行符分隔 组成 OBJECT TYPE
  • 在 Java 中向上转换或移位时抑制符号扩展

    我感觉这是一个相当微不足道的问题 但我被难住了 在我的应用程序中 我使用一对整数在查找表中键入内容 我认为将两个 int 连接成一个 long 并使用单个 long 作为键会更容易 来自 C 语言背景 我希望这样的事情能起作用 int a
  • 为别名命令添加“git help”?

    我已经实现了一个 Git 命令并使用 git 别名将其连接到 Git 但是有没有办法连接 Git 帮助 我在 Windows 上运行 如果我发出git help mycmd我收到一个弹出窗口 告诉我 Git 找不到 git mycmnd h
  • 从另一台设备访问 Azure 模拟器

    我有两个不同的项目 Windows Phone 8 应用程序 我正在真实的物理开发设备上运行 Azure 云服务 其中包含一个简单的 WebRole 端点 其中包含 ASP NET MVC WebAPI 我的目标很简单 使用从真实设备运行的
  • 初始化器列表上的 static_assert::size()

    Why is std initializer list lt E gt size不允许在static assert 即使它被声明为constexpr在我的 libstdc v 4 6 中 例如 以下代码 template
  • 在触发期间更新 oracle 中的同一行?

    简短的问题 因为我不知道如何搜索这个 我可以 重新更新 同一行吗 例如 我有一个存储付款小计的字段 并且考虑到我的业务限制 我可以更新该值 我可以仅用触发器更新同一行的总计吗 预先谢谢您 顺便说一句 我正在使用 Oracle 和 PL SQ
  • 使用 geom_tile() 的 R ggplot 热图:如何按年份排序并在 y 轴上显示所有年份?

    在研究了哈德利的书并在这里搜索后 我创建了一个由年和月矩阵组成的热图 颜色根据时间序列变量的百分比变化而变化 热图和我用来获取它的代码如下所示 我还有一些我自己无法解决的问题 1 如何对矩阵进行排序 排序 以便 y 轴中的年份从最早到最晚
  • .Net Standard项目,如何使用System.ServiceModel类

    我已将 PCL 项目转换为 Net Standard 1 5 项目 我已经从 nuget 安装了 System ServiceModel 包 但找不到使用 System ServiceModel 命名空间的方法 任何帮助表示赞赏 安装 Sy
  • linux-x64 二进制文件无法在 linuxmusl-x64 平台上使用错误

    我正在安装Sharp用于使用 package json 的 Nodejs 项目的 docker 映像上的映像压缩包 当我创建容器时 我收到有关 Sharp 包的以下错误 app node modules sharp lib libvips
  • 在 Rails 中呈现路由错误的 404 页面

    我试图在 Rails 中渲染集成的 404 页面作为例外 我尝试了这个 但仍然收到路由错误页面 posts controller rb def destroy if current user username post email post
  • 使用 PropertyEditor (ControlsFX) 的属性表示例

    我一直在寻找使用 ControlsFX 属性表的任何好例子 但除了这个之外找不到任何东西 在此示例中 包含 NameItem 对象的 ObservableList 项被添加到其构造函数中的 PropertySheet 对象中 就像文档所述一
  • Ubuntu 16 LTS - Eclipse 窗口首选项无法正常工作

    我刚刚安装了 Ubuntu 16 04 LTS 我于 3 月 2 日下载了适用于 Linux 64 位的全新 Eclipse 我使用的是最新的 Oracle 热点 JDK 1 8 update 91 版本 在尝试启用 Eclipse 常规首
  • 如何在 Snowflake 中编写等效的 IF ELSE 即席 SQL 查询

    我正在尝试创建一个与以下基于 T SQL 的即席查询等效的 Snowflake T SQL version Declare i int 0 If i 0 PRINT 0 Else Begin PRINT 1 RETURN PRINT 2 E
  • 使用 Hibernate 防止 SQL 注入

    我正在使用 Hibernate 我知道你可以使用 HQL 来防止 SQL 注入 String query1 from Obj where id id String query2 from Obj where id id query1不安全
  • 使用 webkit 转换 Html 到 PDF

    从 Html 生成 PDF 时 webkit 转换不起作用 我需要将 div 旋转 45 度 使用 webkit 变换后 它在屏幕上看起来没问题 但使用 winnovatives Html 到 PDF 转换器时 输出是平坦的而不是旋转的 有
  • 订阅的角度替代方案?

    我使用的是异步订阅 因此计数器变量在更新之前被返回 是否有另一种订阅方法 允许我仅在计数器变量更新为从后端获取的值后才返回计数器变量 makeOffer product string offer number number let form
  • redux 和 React 中减速器的先前状态

    这是我的减速器的样子 export default function catalogReducer state initialState catalogItems action switch action type case types L