【问题标题】:How to store unique item in react redux?如何在react redux中存储唯一项目?
【发布时间】:2021-11-21 11:34:11
【问题描述】:

我想在我的 redux 购物篮中存储唯一值,但我无法存储它。 我实现了从 StackOverflow 本身找到的这段代码,但它对我不起作用。我仍然得到存储在 redux 中的重复值。

看到这个:

代码:

    export const initialState = {
        basket: []
    }
    
    const reducer = (state, action) => {
        switch(action.type){
            case 'Add_To_New':
                if (state.basket.indexOf(action.item) === -1) {
                    return {
                        ...state,
                        basket:[...state.basket, action.item],
                    };
                }
                return state;
                default:
                    return state;
        }
    }
    
    export default reducer;

在购物篮中,如果该用户已经存在,我只想存储一次。如果我再次添加用户,它不应该存储它,而是返回之前存储的值。

【问题讨论】:

  • action.item 的值是多少?
  • 从代码来看:你在比较具体的对象。也许那里出了问题。而是按某些属性进行比较,例如 id

标签: reactjs redux react-redux


【解决方案1】:

如果没有看到更多代码,您正在执行的 indexOf 可能与现有对象不匹配,可能是因为您要匹配的对象中包含一些不同类型的数据。

假设你的 item 上面有某种 id 字段,我将在这个例子中使用 id,你也可以这样做

export const initialState = {
    basket: []
}

const reducer = (state, action) => {
    switch(action.type){
        case 'Add_To_New':
            if (!state.basket.map(item => item.id).includes(action.item.id) {
                return {
                    ...state,
                    basket:[...state.basket, action.item],
                };
            }
            return state;
            default:
                return state;
    }
}

export default reducer;

【讨论】:

  • 是的,我们需要比较 item.id 字段,但您的解决方案有点令人困惑,首先,您使用的是 map,然后是 includes。相反,我们可以使用!state.basket.some(item => item.id === action.item.id)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-13
  • 1970-01-01
  • 1970-01-01
  • 2016-11-14
  • 1970-01-01
相关资源
最近更新 更多