РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
⊗ppinSpErNt 83 of 112 menu
◀ ▶

Сетевая ошибка в Inertia

Допустим, юзер отправляет карточку работника, а связь обрывается раньше, чем Laravel успевает ответить. Это уже не страница ошибки и не код HTTP: ответа нет вовсе. Визит срывается, и клиент показывает своё окно, которое трудно связать с формой на экране.

Давайте изучим глобальное событие networkError. Его слушают через объект router на странице, где нужен свой текст. В деталях события лежит объект ошибки, а метод preventDefault у события отменяет стандартную реакцию Inertia, чтобы оставить открытый экран и вывести предупреждение рядом с формой.

Давайте опишем страницу создания работника:

<?php use Illuminate\Support\Facades\Route; use Inertia\Inertia; Route::get('/workers/create', function () { return Inertia::render('Workers/Create'); }); Route::post('/workers', function () { return back(); }); ?>

Давайте подключим слушатель и строку про обрыв связи:

<script setup> import { onMounted, onUnmounted, ref } from 'vue' import { router } from '@inertiajs/vue3' const offlineNotice = ref(false) function onNetworkError(event) { event.preventDefault() offlineNotice.value = true } let removeNetworkListener onMounted(() => { removeNetworkListener = router.on( 'networkError', onNetworkError ) }) onUnmounted(() => { removeNetworkListener?.() }) function save() { offlineNotice.value = false router.post('/workers', { name: 'Alex' }) } </script> <template> <h1>New worker</h1> <p v-if="offlineNotice"> Connection lost. Try again. </p> <button type="button" @click="save"> Retry save </button> </template>

Сделайте экран CrewBoard с сохранением записи, чтобы при обрыве связи появлялась ваша короткая надпись, а не стандартное сообщение клиента.

← →
↑
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить