【问题标题】:Redux: Reducer not mutating state in first attemptRedux:Reducer 在第一次尝试时没有改变状态
【发布时间】:2019-03-15 13:23:05
【问题描述】:

我正在使用打字稿处理基于 React 的应用程序中的表。我正在为表实现搜索功能。表格内可以显示大量数据,所以我在后端执行搜索、排序、分页。

我有一个表格组件,它从父组件接收数据作为道具。我正在使用 redux 的反应并使用 sagas,我从后端获取数据。我正在使用 redux 状态向组件提供数据。我正在使用减速器来改变状态。

我面临的问题是,当我重新加载数据时,我获取了数据并使用 reducer 我改变了状态,但它没有显示在前端。但是当我第二次尝试时,它会显示数据。

我的减速器代码如下。

const dataEnteries: Reducer<any> = (
    state = {},
    { type, detail, pagination }: DataResponse
) => {
    switch (type) {
        case actionTypes.DATA_LOAD_RESPONSE:
            if (!detail) {
                return {};
            }
            const data: any[] = [];
            const tableData: any[] = [];
            detail.forEach((o) => {
                tableData.push(o.dataDetail);
                Data.push(o)
            })
            const resultMap = new Map()
            resultMap["data"] = data;
            resultMap["tableData"] = tableData;
            resultMap["pagination"] = pagination;
            return resultMap;
        default:
            return state;
    }
};

这是我到道具功能的地图状态

const mapStateToProps = ({ data }: { data: DataState }): DataProps => ({
    data: data.dataEnteries
});

dataEnteries 是最里面的属性

我无法弄清楚我的情况出了什么问题,因为第二次,事情正常。

【问题讨论】:

  • 你的商店是什么形状的?如果 auditEnteries 是您的根减速器,那么商店中不会有 dataEnteries 属性

标签: reactjs typescript redux


【解决方案1】:

您可以尝试在返回时使用扩展运算符。

return ...resultMap

当您更新对象内的道具时,状态无法识别更改,则不会调用渲染来刷新组件。

试试这个,如果不行请告诉我。

更多参考请查看:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Spread_syntax

【讨论】:

  • 它无法正常工作,因为我正在使用类型脚本,...在 resultMap 返回错误之前,错误 TS1109:预期表达式。
猜你喜欢
  • 2023-01-19
  • 2012-06-01
  • 2021-01-13
  • 2023-04-04
  • 2019-03-26
  • 1970-01-01
  • 1970-01-01
  • 2022-11-30
相关资源
最近更新 更多