У меня небольшая проблема с React (все еще нова к ней). У меня есть массив результатов. Эти результаты имеют вложенные заказы, также в массиве, а последние - то, что я манипулирую.Splice удаляет только последний элемент в массиве
Когда пользователь создает бронирование, все идет так, как ожидалось - findIndex
получает правильный элемент результата и соответствующим образом изменяет его массив заявок.
Однако, когда я хочу «Unbook», он находит только последний результат в массиве, и findIndex
всегда -1
(так что я даже не добрался до Bookings части, потому что индекс результата я получаю неправильно).
Код аналогичен, у моих элементов все есть уникальные ключи, и я не понимаю, что может быть проблемой (используя Alt как реализацию Flux)?
Вот что происходит на Create:
onCreateBookingSuccess(data) {
let resultIndex = this.results.findIndex((result) => result.id === data.id);
this.results.update(resultIndex, (result) => result.bookings.push(data));
toastr.info('Booked! User will receive notification.');
}
И на удаление:
onDestroyBookingSuccess(data) {
let resultIndex = this.results.findIndex((result) => result.id === data.id);
var myBooking;
this.results.map((result) => {
myBooking = result.bookings.findIndex((booking) => booking.id === data.booking);
});
this.results.update(resultIndex, (result) => result.bookings.splice(myBooking,1));
toastr.warning('Unbooked! User will receive notification.');
}
Мой объект:
<Result key={result.id} id={result.id} bookings={result.bookings} />
Как я уже говорил, первая операция идет по плану, все изменяется так, как должно. Проблема со вторым оператором начинается с самого начала, когда resultIndex
возвращает -1
.
- это данные, переданные правильно в Destroy? – luanped
@luanped Должно быть правильно, да. Я вижу возвращение, которое я хочу увидеть в панели «Сеть» Chrome с данными об уничтоженной записи. Вот метод из действий: 'deleteBookingFor (bookingId) { $ .ajax ({ URL: '/ бронирование /' + bookingId, тип: 'DELETE' }) .done ((данные) => { this.actions.destroyBookingSuccess (data); }) .fail ((jqXhr) => { this.actions.destroyBookingFail (jqXhr); }); } ' (извините, код формата комментариев довольно плохо), и метод Ajax является методом REST, поэтому уничтожение DB отлично работает. – MindRave