Частичные перезагрузки

При посещении одной и той же страницы не всегда необходимо повторно получать все данные, необходимые для этой страницы, с сервера. Фактически, выбор только части данных может быть полезной оптимизацией производительности, если допустимо, чтобы некоторые данные страницы стали устаревшими. Это можно сделать в режиме 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-link> автоматически регистрируется плагином Inertia.

Отложенная оценка данных

Чтобы частичная перезагрузка была наиболее эффективной, обязательно используйте серверную часть отложенной оценки данных. Это делается путем заключения всех необязательных данных страницы в замыкание.

Когда Inertia выполняет визит, она определяет, какие данные требуются, и только после этого оценивает замыкание. Это может значительно повысить производительность страниц с большим количеством дополнительных данных.

return Inertia::render('Users/Index', [

    // ВСЕГДА включается при первом посещении
    // НЕОБЯЗАТЕЛЬНО включается при частичной перезагрузке
    // ВСЕГДА оценивается
    'users' => User::get(),

    // ВСЕГДА включается при первом посещении
    // НЕОБЯЗАТЕЛЬНО включается при частичной перезагрузке
    // ТОЛЬКО оценивается при необходимости
    'users' => fn () => User::get(),

    // НИКОГДА не включается при первом посещении
    // НЕОБЯЗАТЕЛЬНО включается при частичной перезагрузке
    // ТОЛЬКО оценивается при необходимости
    'users' => Inertia::lazy(fn () => User::get()),
]);