如何控制前端渲染,一次只渲染30post

How to control the rendering in the frontend, only rendering 30post at once

环境: 后端:Laravel 9, 前端:VueJs 3、InertiaJs

我的预期结果是在用户滚动到底部时呈现或传递数据 to/in 前端。然后它触发了一些东西来渲染更多 data/post.

控制器

/**
 * Rendering the Explore page.
 *
 * @param \Illuminate\Http\Request $request
 * @return \Inertia\Response
 */
public function show(Request $request)
{
    $posts = Post::with('author')
        ->inRandomOrder()
        ->get;

    return Inertia::render('Explore/Explore', [
        'canLogin' => Route::has('login'),
        'canRegister' => Route::has('register'),
        'posts' => $posts,
    ]);
}

目前,它只是呈现了数据库中的所有数据。我在前端有一个显示更多按钮,它只在帖子超过 20 时显示。

<div v-show="posts.length > 30"
     class="pointer-events-none absolute inset-x-0 
            bottom-0 flex justify-center pt-32 pb-8">
    <button type="button"
            class="click pointer-events-auto relative flex h-12 items-center 
            rounded-lg bg-white px-6 text-sm font-semibold 
            text-black hover:bg-gray-200">
        Show more...
    </button>
</div>

我在后端解决这个问题,所以当“显示更多被点击”时,它发布到一个路由并将更多数据传递到页面,但不确定如何实现这一点。任何帮助将不胜感激。

您可以在前端创建 axios.get 来发送请求和接收数据作为 json。

并且在后台你需要添加

if ($request->wantsJson()) {
            return response()->json($posts)
                ->header('Access-Control-Allow-Origin', '*')
                ->header("Access-Control-Allow-Methods", "GET");
        }

一定要记得 return header 为了 CORS