返回

使用 Inertia 传入惰性加载参数:指南

vue.js

使用 Inertia 惰性加载传入参数

引言

在构建单页面应用时,需要在保持高性能的同时动态加载数据。Inertia.js 提供了一种惰性加载机制,可以轻松高效地从后端加载数据。有时,需要向惰性加载请求传递参数,本文将探索如何实现这一目标。

场景概述

假设我们在管理机器的页面上显示产品列表。最初加载时,我们展示了所有产品。然而,我们还希望根据外键部分动态加载缺失的产品。为此,我们从控制器返回两个属性:“产品”和惰性加载的“已加载产品”。

后端实现

在后端控制器中,使用 Inertia::lazy 回调定义惰性加载的“已加载产品”属性,并提供一个签名以接收参数。

return Inertia::render('User/ManageMachine', [
    'products' => $products,
    'loadedProducts' => Inertia::lazy(fn ($propertyId) => StorageProperty::find($propertyId)->products()->toArray()),
]);

前端处理

在前端组件中,我们需要传递属性 ID 作为参数。我们可以使用 usePage 钩子函数从组件中获取属性,如下所示:

<script setup>
import { router, usePage } from '@inertiajs/vue3';
const fetchProducts = (propertyId) => {
    const { propertyId } = usePage().props
    router.reload( { 
        only: [ loadedProducts],
        preserveState: true,
        data: {
          propertyId
        },
    });
</script>

结论

通过在后端定义一个签名并使用前端钩子传递参数,我们可以使用 Inertia 惰性加载轻松传递参数。这提供了动态加载数据的灵活性,同时保持应用程序的性能和响应能力。

常见问题解答

Q:可以在惰性加载中传递多个参数吗?

A: 是的,可以在惰性加载回调用签中定义多个参数,并使用 usePage().props 对象访问它们。

Q:preserveState 布尔值有什么作用?

A: preserveState 选项允许在重新加载时保留惰性加载状态。

Q:可以在惰性加载中使用异步函数吗?

A: 是的,可以使用 async/await 语法在惰性加载回调用签中执行异步操作。

Q:惰性加载的性能优势是什么?

A: 惰性加载可防止在页面加载时加载所有数据,从而提高性能和页面加载速度。

Q:在哪些场景中惰性加载很有用?

A: 惰性加载适用于需要动态加载数据、分页或根据用户交互显示特定内容的应用程序。