У меня есть следующий пример, сохраненный в массиве в 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 вызовом редуктора но из-за повторного рендеринга каждого компонента, вызванного тем фактом, что я не назначил ключ, и все записи, которые появились после удаляемой записи, были размонтированы и снова смонтированы в пользовательском интерфейсе, были обработаны компоненты для каждой записи массива. Похоже, я неправильно понял настоящую проблему, вызывающую проблемы.