【问题标题】:cannot modify the store in Redux无法在 Redux 中修改 store
【发布时间】:2021-09-01 07:29:30
【问题描述】:

我允许自己寻求帮助,因为我找不到问题出在哪里,我只想在我的商店中插入/修改数据并且不可能,但这不是我的第一个......

我的商店

const initilaState = {
    estimates: [],
    currentEstimate: {
        customer: {},
        products: []
    }

}

将对象添加到产品数组

        case "ADD_PRODUCT_TO_CURRENT_ESTIMATE":

            return {
                estimates: state.estimates,
                currentEstimate: {
                    customer: {},
                    products: [...state.currentEstimate.products, action.payload]
                }
            }

将对象添加到客户对象

        case "ADD_CUSTOMER_CURRENT_ESTIMATE":
            return {
                ...state,
                currentEstimate: {
                    customer: action.payload

                }
            }

我不明白为什么,通常空数组没有问题。

即使我从减速器中删除产品并想添加客户,错误也会消失但状态不会改变。

提前感谢您的帮助:)

--------estimatesreducer-------------

const initilaState = {
    estimates: [],
    currentEstimate: {
        customer: {},
        products: []
    }

}

export default function estimatesReducer(state = initilaState, action){
    switch (action.type){
        case "GET_ESTIMATES":
            return {
                estimates: [
                    ...action.payload
                ]
            }

        case "DELETE_ESTIMATE":
            return {
                estimates: state.estimates.filter(estimate => estimate.id !== action.payload)
            }

        case "ADD_PRODUCT_TO_CURRENT_ESTIMATE":

            return {
                ...state,
                estimates: state.estimates,
                currentEstimate: {
                    customer: {},
                    products: [...state.currentEstimate.products, action.payload]
                }
            }

        case "ADD_CUSTOMER_CURRENT_ESTIMATE":
            return {
                ...state,
                currentEstimate: {
                    ...state.currentEstimate,
                    customer: action.payload
                }
            }

/*        case "DELETE_PRODUCT_CURRENT_ESTIMATE" :
            return {
                estimates: state.estimates,
                currentEstimate: {
                    ...state.currentEstimate,
                    products: state.currentEstimate.products.filter(product => product.id !== action.payload)

                }
            }*/

        default:
            return state
    }
}

【问题讨论】:

  • 你需要展示更多关于你的减速器的信息

标签: javascript reactjs redux react-redux reducers


【解决方案1】:

此操作会从currentEstimate 中删除您的product

case "ADD_CUSTOMER_CURRENT_ESTIMATE":
            return {
                ...state,
                currentEstimate: {
                    customer: action.payload

                }
            }

不要忘记在 reducer 上设置之前的状态

case "ADD_CUSTOMER_CURRENT_ESTIMATE":
        return {
            ...state,
            currentEstimate: {
                ...state.currentEstimate
                customer: action.payload
            }
        }

你也忘了在你的第一个动作中返回一个状态

case "ADD_PRODUCT_TO_CURRENT_ESTIMATE":

        return {
            ...state
            estimates: state.estimates,
            currentEstimate: {
                customer: {},
                products: [...state.currentEstimate.products, action.payload]
            }
        }

UPD:您有 2 个操作从状态中删除 currentEstimate - GET_ESTIMATESDELETE_ESTIMATE,因此当您调用 ADD_PRODUCT_TO_CURRENT_ESTIMATE 之后,您会收到错误

【讨论】:

  • 是的,确切地说,我想覆盖旧的客户值,只有一个客户而不是几个,但是尽管您进行了更正,但我仍然有“无法读取未定义的属性'产品'”的错误跨度>
  • 也许您有其他操作将currentEstimate 从状态中删除?
  • 所以,是的,您有 2 个操作将 currentEstimate 从状态 GET_ESTIMATESDELETE_ESTIMATE 中删除
  • 是的,你是对的,我添加了状态并且它有效,非常感谢你,有时你只需要看看外面:)
  • 很高兴能帮上忙!)
猜你喜欢
  • 2018-12-03
  • 1970-01-01
  • 2019-01-27
  • 1970-01-01
  • 1970-01-01
  • 2019-03-17
  • 2019-05-09
  • 2019-02-16
  • 2016-07-12
相关资源
最近更新 更多