Пропс один раз в Inertia
Давайте посмотрим на пропс, который редко меняется, но дорого считать на сервере. Список отделов для формы работника один и тот же на нескольких соседних экранах, и нет смысла готовить его заново при каждом ответе Laravel.
Метод once оборачивает
замыкание с данными. Клиент
Inertia запоминает полученное
значение и на следующих заходах
на страницы с тем же пропсом
не ждёт повторного расчёта
на сервере: поле просто
не включают в ответ, а на
экране остаётся сохранённое.
Пока открыт документ приложения
и пропс снова нужен компоненту,
память клиента его подставляет.
Давайте отдадим отделы через
once вместе с формой:
<?php
use Illuminate\Support\Facades\Route;
use Inertia\Inertia;
Route::get('/workers/create', function () {
return Inertia::render('Workers/Create', [
'departments' => Inertia::once(fn () => [
'Sales',
'Support',
'Warehouse',
]),
]);
});
?>
Давайте выведем список отделов в выпадающем поле:
<script setup>
defineProps({
departments: Array,
})
</script>
<template>
<label>
Department
<select name="department">
<option
v-for="name in departments"
:key="name"
:value="name"
>
{{ name }}
</option>
</select>
</label>
</template>
Сделайте форму работника
Pavel с пропсом shifts,
чтобы варианты смен Morning
и Evening приходили с сервера
один раз и оставались доступны
при повторном открытии формы
в том же приложении.