@Analka

Почему всегда удаляет последний элемент?

Всем привет!

<script lang="ts">
import {
  defineComponent,
  useContext,
  ref,
  useFetch,
} from '@nuxtjs/composition-api'

export default defineComponent({
  setup() {
    const orders = ref([])

    const { $axios, $swal } = useContext() as any

    useFetch(async () => {
      await $axios.$get(`/v1/admin/orders`).then((response: any) => {
        orders.value = response.data
      })
    })

    function deleteItem(data: any) {
      $swal({
        toast: false,
        title: 'Удалить?',
        icon: 'warning',
        showCancelButton: true,
        confirmButtonColor: '#212E40',
        cancelButtonColor: '#d33',
        confirmButtonText: 'Да',
        cancelButtonText: 'Отмена',
        position: 'center',
        showConfirmButton: true
      }).then((result: any) => {
        if (result.value) {
          $axios
            .$delete(`/v1/admin/orders/${data.orderId}`)
            .then((response: any) => {
              $swal({
                timerProgressBar: true,
                icon: 'success',
                title: response.message,
                didOpen: (toast: any) => {
                  toast.addEventListener('mouseenter', $swal.stopTimer)
                  toast.addEventListener('mouseleave', $swal.resumeTimer)
                },
              })
              orders.value.splice(data.index, 1)
            })
            .catch((error: any) => {
              switch (error.response.data.status) {
                case 422:
                  $swal({
                    timerProgressBar: true,
                    icon: 'error',
                    title: error.response.data.message,
                    didOpen: (toast: any) => {
                      toast.addEventListener('mouseenter', $swal.stopTimer)
                      toast.addEventListener(
                        'mouseleave',
                        $swal.resumeTimer
                      )
                    },
                  })
                  break
                default:
                  $swal({
                    timerProgressBar: true,
                    icon: 'error',
                    title: error.response.data.message,
                    didOpen: (toast: any) => {
                      toast.addEventListener('mouseenter', $swal.stopTimer)
                      toast.addEventListener(
                        'mouseleave',
                        $swal.resumeTimer
                      )
                    },
                  })
              }
            })
        }
      })
    }

    return { orders, deleteItem }
  },
})
</script>

может кто сталкивался, при удалении элементов по key всегда удаляет последний элемент, все сверил data.index совпадает c index массива orders но удаляет последний всегда
  • Вопрос задан
  • 112 просмотров
Решения вопроса 1
Fragster
@Fragster
помогло? отметь решением!
Скорее всего в шаблоне используется индекс как ключ элемента. Если состав массива меняется, то такое при использовании ref работать не будет. Нужно либо использовать какое-то уникальное поле из элементов массива, либо использовать reactive, подробнее https://v3.ru.vuejs.org/ru/api/refs-api.html и https://v3.ru.vuejs.org/ru/api/basic-reactivity.ht...
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы