Более эффективный способ, который также включает в себя гораздо меньше кода, состоит в том, чтобы хранить ваши данные в виде графа объектов с ключом идентификатора книги.
Таким образом, ваше начальное состояние будет выглядеть как
books: {
1: {
id: 1,
title: 'Lord of the rings',
...the rest
},
2: {
id: 2,
... the rest
}
}
В вашей функции редуктора вы можете использовать клавишу id, чтобы найти или обновить элементы намного проще
case 'UPDATE_BOOK':
return {
...state.books,
[action.payload.id]: action.payload
}
case 'DELETE_BOOK'
const next = {...state.books}
delete next[action.payload]
return {
...state,
books: next
}
Я понимаю, что это не совсем решение вашей проблемы, я просто предоставляя вам другой способ хранения ваших данных, что означает, что вам не нужно постоянно фильтровать массивы.
А просто возвращать значения просто Object.values(state.books)