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

Слияние пропсов в Inertia

Давайте рассмотрим ситуацию, когда на экране уже показана часть меток, а человек нажимает «ещё» и ждёт, что новые пункты появятся под старыми, а не заменят весь список.

При обычном ответе Inertia пропс с тем же именем перезаписывает старое значение в памяти клиента. Метод merge помечает массив так, что при повторном запросе на ту же страницу новые элементы дописываются к уже показанным. Полный заход на адрес по-прежнему заменяет пропс целиком, как без слияния.

Давайте отдадим первую порцию меток и обернём массив в merge:

<?php use Illuminate\Support\Facades\Route; use Inertia\Inertia; Route::get('/tags', function () { $all = [ 'Laravel', 'Vue', 'Inertia', 'Tailwind', 'Vite', 'PHP', ]; $page = (int) request()->input('page', 1); $chunk = array_slice($all, ($page - 1) * 2, 2); return Inertia::render('Tags/Index', [ 'tags' => Inertia::merge($chunk), 'page' => $page, ]); }); ?>

Давайте увеличим номер страницы и запросим с клиента только пропс tags:

<script setup> import { router } from '@inertiajs/vue3' const props = defineProps({ tags: Array, page: Number, }) function loadMore() { router.reload({ data: { page: props.page + 1 }, only: ['tags'], }) } </script> <template> <ul> <li v-for="tag in tags" :key="tag"> {{ tag }} </li> </ul> <button type="button" @click="loadMore"> Load more </button> </template>

Сделайте экран работника Daria с пропсом skills, чтобы при нажатии «Load more» новые навыки PHP и Redis дописывались к уже показанным HTML и CSS, а не заменяли их.

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