Redux добавляет дублированный элемент массива при загрузке из состояния - PullRequest
0 голосов
/ 19 июня 2019

Привет всем, наверное, простой вопрос, в основном у меня есть кнопка, когда я нажимаю на нее, запускается действие и передается весь объект, который я объединяю в массив, если он не дублируется, но странно, что происходит, потому что я сохраняю данные в локальное хранилище ипосле того, как я загрузил его оттуда, он не проверяет дубликаты и дублирует элемент массива.Мой код редуктора ниже, может быть, ошибка есть?

Искал как можно больше.

const initialState = {
    favourites: []
};

const favourites = (state = initialState, action) => {
const { payload } = action;
switch (action.type) {
    case actionTypes.ADD_FAVOURITES:
    return {
        ...state,
        favourites:
        state.favourites.indexOf(payload) === -1
            ? state.favourites.concat(payload)
            : state.favourites
    };
    default:
    return state;
}
};

1 Ответ

1 голос
/ 19 июня 2019

Проблема здесь заключается в том, что state.favourites.indexOf (payload) === -1 всегда верно.Это связано с тем, что функция Array.prototype.findIndex () не находит идентичные объекты .

Вы должны использовать альтернативный метод проверки, чтобы увидеть, находится ли объект полезной нагрузки в массиве избранных.Например, вы можете попробовать что-то вроде этого:

const favourites = (state = initialState, action) => {
    const { payload } = action;
    switch (action.type) {
        case actionTypes.ADD_FAVOURITES:
            return {
                ...state,
                favourites:
                    JSON.stringify(state.favourites).indexOf(JSON.stringify(payload)) === -1
                        ? state.favourites.concat(payload)
                        : state.favourites
            };
        default:
            return state;
    }
};
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...