/
githubmirror
/
next.js
Обзор
Документация
Войти
/
githubmirror
/
next.js
Код
Запросы
0
Пакеты
0
Релизы
0
Аналитика
Безопасность
canary
examples/with-supabase/components/tutorial/fetch-data-steps.tsx
163 строки
5 KB
Tom Moses
examples(with-supabase): fix import statement in tutorial (#83605)
09 сен 2025, 14:59
Не верифицирован
09 сен 2025, 14:59
1074588
Код
Авторство
О чём код?
import { TutorialStep } from "./tutorial-step"; import { CodeBlock } from "./code-block"; const create = `create table notes ( id bigserial primary key, title text ); insert into notes(title) values ('Today I created a Supabase project.'), ('I added some data and queried it from Next.js.'), ('It was awesome!'); `.trim(); const rls = `alter table notes enable row level security; create policy "Allow public read access" on notes for select using (true);`.trim(); const server = `import { createClient } from '@/lib/supabase/server' export default async function Page() { const supabase = await createClient() const { data: notes } = await supabase.from('notes').select() return <pre>{JSON.stringify(notes, null, 2)}</pre> } `.trim(); const client = `'use client' import { createClient } from '@/lib/supabase/client' import { useEffect, useState } from 'react' export default function Page() { const [notes, setNotes] = useState<any[] | null>(null) const supabase = createClient() useEffect(() => { const getData = async () => { const { data } = await supabase.from('notes').select() setNotes(data) } getData() }, []) return <pre>{JSON.stringify(notes, null, 2)}</pre> } `.trim(); export function FetchDataSteps() { return ( <ol className="flex flex-col gap-6"> <TutorialStep title="Create some tables and insert some data"> <p> Head over to the{" "} <a href="https://supabase.com/dashboard/project/_/editor" className="font-bold hover:underline text-foreground/80" target="_blank" rel="noreferrer" > Table Editor </a>{" "} for your Supabase project to create a table and insert some example data. If you're stuck for creativity, you can copy and paste the following into the{" "} <a href="https://supabase.com/dashboard/project/_/sql/new" className="font-bold hover:underline text-foreground/80" target="_blank" rel="noreferrer" > SQL Editor </a>{" "} and click RUN! </p> <CodeBlock code={create} /> </TutorialStep> <TutorialStep title="Enable Row Level Security (RLS)"> <p> Supabase enables Row Level Security (RLS) by default. To query data from your <code>notes</code> table, you need to add a policy. You can do this in the{" "} <a href="https://supabase.com/dashboard/project/_/editor" className="font-bold hover:underline text-foreground/80" target="_blank" rel="noreferrer" > Table Editor </a>{" "} or via the{" "} <a href="https://supabase.com/dashboard/project/_/sql/new" className="font-bold hover:underline text-foreground/80" target="_blank" rel="noreferrer" > SQL Editor </a> . </p> <p> For example, you can run the following SQL to allow public read access: </p> <CodeBlock code={rls} /> <p> You can learn more about RLS in the{" "} <a href="https://supabase.com/docs/guides/auth/row-level-security" className="font-bold hover:underline text-foreground/80" target="_blank" rel="noreferrer" > Supabase docs </a> . </p> </TutorialStep> <TutorialStep title="Query Supabase data from Next.js"> <p> To create a Supabase client and query data from an Async Server Component, create a new page.tsx file at{" "} <span className="relative rounded bg-muted px-[0.3rem] py-[0.2rem] font-mono text-xs font-medium text-secondary-foreground border"> /app/notes/page.tsx </span>{" "} and add the following. </p> <CodeBlock code={server} /> <p>Alternatively, you can use a Client Component.</p> <CodeBlock code={client} /> </TutorialStep> <TutorialStep title="Explore the Supabase UI Library"> <p> Head over to the{" "} <a href="https://supabase.com/ui" className="font-bold hover:underline text-foreground/80" > Supabase UI library </a>{" "} and try installing some blocks. For example, you can install a Realtime Chat block by running: </p> <CodeBlock code={ "npx shadcn@latest add https://supabase.com/ui/r/realtime-chat-nextjs.json" } /> </TutorialStep> <TutorialStep title="Build in a weekend and scale to millions!"> <p>You're ready to launch your product to the world! 🚀</p> </TutorialStep> </ol> ); }