React-Redux удаляет объект массива синхронно - PullRequest
1 голос
/ 26 марта 2020

У меня есть следующий пример, сохраненный в массиве в Redux:

example: [
  { type: "A", value: 25 },
  { type: "B", value: 23 },
  { type: "C", value: 324 },
  { type: "A", value: 25 },
]

Как вы можете видеть, некоторые объекты могут появляться несколько раз, это не должно быть изменено. Теперь я пытаюсь удалить указанные c объекты из списка без использования индекса. Это довольно просто, потому что я могу проверить, является ли объект объектом для удаления, на основе сравнения ниже:

example[0] == example[2]  // => false
example[0] === example[2] // => false

example[0] == example[0]  // => true
example[0] === example[0] // => true

Проблема заключается в асинхронном поведении [] .filter, который я использую для удаления записи в моем редукторе, как вы можете видеть, реализовано здесь:

case EXAMPLE.REMOVE:
    return state.filter((obj) => obj !== action.payload.objectToRemove)

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

PS: Я совершенно уверен, что асинхронное поведение редукса является желательным и правильным. способ сделать это, может мне понадобится другой

Редактировать: я смог решить проблему из-за того факта, что, как описано в комментариях, она не была вызвана асинхронным c вызовом редуктора но из-за повторного рендеринга каждого компонента, вызванного тем фактом, что я не назначил ключ, и все записи, которые появились после удаляемой записи, были размонтированы и снова смонтированы в пользовательском интерфейсе, были обработаны компоненты для каждой записи массива. Похоже, я неправильно понял настоящую проблему, вызывающую проблемы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...