При посещении одной и той же страницы не всегда необходимо повторно получать все данные, необходимые для этой страницы, с сервера. Фактически, выбор только части данных может быть полезной оптимизацией производительности, если допустимо, чтобы некоторые данные страницы стали устаревшими. Это можно сделать в режиме Inertia с функцией «частичных перезагрузок».
В качестве примера рассмотрим страницу пользователей, которая включает список пользователей, а также возможность фильтрации пользователей по их компании. При первом запросе к странице пользователя данные users
и companies
передаются компоненту страницы. Однако при последующих посещениях той же страницы (возможно, для фильтрации пользователей) Вы можете запрашивать с сервера только данные users
, а не данные companies
. Затем Inertia автоматически объединит частичные данные, возвращаемые сервером, с данными, которые уже есть в памяти на стороне клиента.
Чтобы выполнить частичную перезагрузку, используйте свойство only
, чтобы указать, какие данные Вы хотите вернуть с сервера. Это принимает массив ключей, который соответствует ключам свойств.
import { Inertia } from '@inertiajs/inertia'
Inertia.visit(url, {
only: ['users'],
})
Поскольку частичная перезагрузка может выполняться только для одного и того же компонента страницы, почти всегда имеет смысл просто использовать метод Inertia.reload()
, который автоматически использует текущий URL.
import { Inertia } from '@inertiajs/inertia'
Inertia.reload({ only: ['users'] })
Также возможно выполнить частичную перезагрузку с помощью ссылок Inertia, используя свойство only
.
<inertia-link href="/users?active=true" :only="['users']">Показать активные</inertia-link>
Чтобы частичная перезагрузка была наиболее эффективной, обязательно используйте серверную часть отложенной оценки данных. Это делается путем заключения всех необязательных данных страницы в замыкание.
Когда Inertia выполняет визит, она определяет, какие данные требуются, и только после этого оценивает замыкание. Это может значительно повысить производительность страниц с большим количеством дополнительных данных.
return Inertia::render('Users/Index', [
// ВСЕГДА включается при первом посещении
// НЕОБЯЗАТЕЛЬНО включается при частичной перезагрузке
// ВСЕГДА оценивается
'users' => User::get(),
// ВСЕГДА включается при первом посещении
// НЕОБЯЗАТЕЛЬНО включается при частичной перезагрузке
// ТОЛЬКО оценивается при необходимости
'users' => fn () => User::get(),
// НИКОГДА не включается при первом посещении
// НЕОБЯЗАТЕЛЬНО включается при частичной перезагрузке
// ТОЛЬКО оценивается при необходимости
'users' => Inertia::lazy(fn () => User::get()),
]);