tRPC End-to-End Type Safe APIs · Lektion

Server Components und tRPC-Datenabruf

Verstehen Sie, wie Sie mit tRPC Daten direkt in Next.js Server Components abrufen, um eine optimale Leistung zu erzielen.

Lektion 3 von 411 Schritte

Server Components und tRPC-Datenabruf ist eine kostenlose tRPC End-to-End Type Safe APIs-Lektion auf CoddyKit. Dies ist Lektion 3 von 4. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des tRPC End-to-End Type Safe APIs-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der tRPC End-to-End Type Safe APIs-Kurs umfasst insgesamt 4 Lektionen.

Teile dieser Lektion wurden noch nicht übersetzt und werden auf Englisch angezeigt.

Intro to Server Components

Welcome! In Next.js, Server Components (SCs) are a powerful feature that lets you render parts of your UI directly on the server.

This means less JavaScript sent to the browser, faster initial page loads, and improved SEO!

Data Fetching on the Server

A key benefit of Server Components is their ability to fetch data directly on the server. Unlike Client Components, SCs don't need to make API calls from the browser.

This allows data to be fetched and rendered before the page is even sent to the client, boosting performance.

tRPC's Role in SCs

This is where tRPC shines! When used in Server Components, tRPC allows you to call your backend procedures directly, without any HTTP overhead.

It's like importing a local function, but with end-to-end type safety guaranteed by tRPC and TypeScript.

Build a Server-Side Caller

To fetch data in Server Components, we need a special tRPC client that calls procedures directly, bypassing HTTP. This is often called a "server-side caller" or "server client."

It uses your tRPC router directly to ensure type safety without network overhead. Here's a simplified example:

import { appRouter } from '@/server/routers/_app';
import { createCallerFactory } from '@trpc/server';

// Create a tRPC caller that can be used on the server
const createCaller = createCallerFactory(appRouter);

export const serverClient = createCaller({});
// Context can be passed here, e.g., createCaller({ user: currentUser })

Fetching Data in an SC

Now, let's use our serverClient to fetch data directly within a Next.js Server Component. Notice how it looks just like calling a local function!

The data is fetched on the server before the component is rendered and sent to the client.

// app/page.tsx (Server Component)
import { serverClient } from '@/utils/trpc';

export default async function HomePage() {
  const posts = await serverClient.post.list(); // Call a tRPC query

  return (
    <div>
      <h1>Latest Posts</h1>
      <ul>
        {posts.map(post => (
          <li key={post.id}>{post.title}</li>
        ))}
      </ul>
    </div>
  );
}

SC Data to Client Components

Server Components often fetch data, but UI interactions happen in Client Components. You can pass the fetched data as props from an SC to a CC.

Remember to mark client components with "use client" at the top.

// components/PostList.tsx (Client Component)
"use client";

interface Post {
  id: string;
  title: string;
}

export function PostList({ posts }: { posts: Post[] }) {
  // Client-side interactions can happen here
  return (
    <ul>
      {posts.map(post => (
        <li key={post.id}>{post.title}</li>
      ))}
    </ul>
  );
}

// app/page.tsx (Server Component, updated)
import { serverClient } from '@/utils/trpc';
import { PostList } from '@/components/PostList';

export default async function HomePage() {
  const posts = await serverClient.post.list();

  return (
    <div>
      <h1>Latest Posts</h1>
      <PostList posts={posts} /> {/* Pass data as props */}
    </div>
  );
}

Queries with Input Parameters

Just like regular tRPC queries, you can pass input parameters to your server-side tRPC calls. This is useful for fetching specific data based on URL parameters or other server-side logic.

// app/posts/[id]/page.tsx (Server Component)
import { serverClient } from '@/utils/trpc';

interface PostPageProps {
  params: { id: string };
}

export default async function PostPage({ params }: PostPageProps) {
  const { id } = params;
  const post = await serverClient.post.byId({ id }); // Pass 'id' as input

  if (!post) {
    return <div>Post not found!</div>;
  }

  return (
    <div>
      <h1>{post.title}</h1>
      <p>{post.content}</p>
    </div>
  );
}

Graceful Error Handling

Errors thrown by your tRPC procedures on the server will propagate up to the Server Component. You can use standard JavaScript try...catch blocks to handle them.

This ensures your application remains robust even if data fetching fails.

// app/page.tsx (Server Component with error handling)
import { serverClient } from '@/utils/trpc';

export default async function HomePage() {
  let posts = [];
  let error = null;

  try {
    posts = await serverClient.post.list();
  } catch (e) {
    console.error("Failed to fetch posts:", e);
    error = "Could not load posts. Please try again.";
  }

  return (
    <div>
      <h1>Latest Posts</h1>
      {error && <p style={{ color: 'red' }}>{error}</p>}
      <ul>
        {posts.map(post => (
          <li key={post.id}>{post.title}</li>
        ))}
      </ul>
    </div>
  );
}

SC vs. CC Data Fetching

When should you use Server Components for data fetching versus Client Components (e.g., with React Query)?

  • Server Components: Ideal for initial data, SEO, static/server-rendered content, and reducing client bundle size.
  • Client Components: Best for interactive data, real-time updates, user-specific data after initial load, and mutations.

Often, you'll use a mix of both!

Server Component Data Fetch

Consider a Next.js App Router project using tRPC. You need to display a list of products on the initial page load, which should be fast and SEO-friendly.

Recap: SCs & tRPC

In this lesson, we explored fetching data directly within Next.js Server Components using tRPC.

  • We learned to create a server-side tRPC caller.
  • Fetched data directly in Server Components.
  • Passed fetched data as props to Client Components.
  • Handled query parameters and errors in SCs.
  • Understood the distinction between SC and CC data fetching.

This approach combines tRPC's type safety with Server Components' performance benefits for robust and efficient data fetching.

Kostenlos starten

Lerne tRPC End-to-End Type Safe APIs mit einem KI-Tutor — kostenlos

Schreibe und führe echten Code in deinem Browser aus, bekomme sofortige Hilfe von einem 24/7 KI-Tutor und setze dein Lernen im Web oder in der App fort.

Kurse
10
Lektionen
40

Häufig gestellte Fragen

Ist die Lektion „Server Components und tRPC-Datenabruf“ kostenlos?

Ja — der vollständige Text von „Server Components und tRPC-Datenabruf“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des tRPC End-to-End Type Safe APIs-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der tRPC End-to-End Type Safe APIs-Kurs umfasst insgesamt 4 Lektionen.

Was lerne ich in „Server Components und tRPC-Datenabruf“?

Verstehen Sie, wie Sie mit tRPC Daten direkt in Next.js Server Components abrufen, um eine optimale Leistung zu erzielen. Du übst tRPC End-to-End Type Safe APIs mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.

Brauche ich Erfahrung, um tRPC End-to-End Type Safe APIs zu starten?

Keine Vorkenntnisse erforderlich. tRPC End-to-End Type Safe APIs auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 3 von 4.

Wie lange dauert die Lektion „Server Components und tRPC-Datenabruf“?

Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.

Kann ich in dieser tRPC End-to-End Type Safe APIs-Lektion Code schreiben und ausführen?

Ja. Jede tRPC End-to-End Type Safe APIs-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.

Alle Lektionen in diesem Kurs

  1. tRPC mit dem Next.js App Router
  2. Erweiterte React-Query-Integration
  3. Server Components und tRPC-Datenabruf
  4. Optimistische Aktualisierungen mit tRPC-Mutationen
← Zurück zu tRPC End-to-End Type Safe APIs