दस्तावेज़साझा अनुबंध
किसी घटक में सर्वर से डेटा प्राप्त करें
किसी घटक में सर्वर से डेटा लाने के लिए, @nexy/client से useFetch(url) पर कॉल करें: यह एक GET को प्रोजेक्ट के रूट पर भेजता है और data, error, pending और refresh वापस देता है।
वह मार्ग जो उत्तर देता है
useFetch प्रोजेक्ट के किसी भी GET रूट से JSON पढ़ता है। नीचे दिए गए दोनों उदाहरण समान डेटा प्रस्तुत करते हैं:
USERS = [{"id": 1, "name": "Ada"}, {"id": 2, "name": "Linus"}]एक फ़ाइल मार्ग इसका उत्तर देता है:
from src.data import USERS async def GET(): return USERSएक नियंत्रक इसका उत्तर देता है:
from nexy.decorators import Controller from src.data import USERS @Controller("/api/users")class UsersController: async def get(self): return USERSuseFetch से React और Preact में डेटा प्राप्त करें
import { useFetch } from "@nexy/client"; type User = { id: number; name: string }; export function Users() { const { data, error, pending, refresh } = useFetch<User[]>("/api/users"); if (error) return <p>Could not load the users: {error.message}</p>; if (pending && !data) return <p>Loading...</p>; return ( <> <ul>{data?.map((user) => <li key={user.id}>{user.name}</li>)}</ul> <button onClick={() => refresh()}>Reload</button> </> );}useFetch से Vue में डेटा प्राप्त करें
data, error और pending परिकलित रेफरी हैं:
<script setup lang="ts">import { useFetch } from "@nexy/client"; type User = { id: number; name: string };const { data, error, pending, refresh } = useFetch<User[]>("/api/users");</script> <template> <p v-if="error">Could not load the users: {{ error.message }}</p> <p v-else-if="pending && !data">Loading...</p> <ul v-else> <li v-for="user in data" :key="user.id">{{ user.name }}</li> </ul> <button @click="refresh()">Reload</button></template>Svelte में useFetch से डेटा प्राप्त करें
useFetch एक स्टोर लौटाता है: इसे $ के साथ पढ़ें, और स्टोर पर ही refresh पर कॉल करें:
<script lang="ts"> import { useFetch } from "@nexy/client"; type User = { id: number; name: string }; const users = useFetch<User[]>("/api/users");</script> {#if $users.error} <p>Could not load the users: {$users.error.message}</p>{:else if $users.pending && !$users.data} <p>Loading...</p>{:else} <ul> {#each $users.data ?? [] as user (user.id)}<li>{user.name}</li>{/each} </ul>{/if}<button onclick={() => users.refresh()}>Reload</button>Solid में useFetch से डेटा प्राप्त करें
data, error और pending एक्सेसर्स हैं:
import { For, Show } from "solid-js";import { useFetch } from "@nexy/client"; type User = { id: number; name: string }; export function Users() { const users = useFetch<User[]>("/api/users"); return ( <Show when={!users.error()} fallback={<p>Could not load the users.</p>}> <ul><For each={users.data() ?? []}>{(user) => <li>{user.name}</li>}</For></ul> <button onClick={() => users.refresh()}>Reload</button> </Show> );}किसी पृष्ठ पर घटक दिखाएँ
एक फ़ाइल पृष्ठ घटक आयात करता है:
import { Users } from "@/components/Users"; export default function UsersPage() { return <Users />;}एक नियंत्रक एक .nexy दृश्य लौटाता है, और दृश्य घटक को माउंट करता है:
from "@/components/Users.tsx" import Users<Users directive="client:load" />एक Vue, Svelte या Solid घटक को उसके ढांचे के आयात सिंटैक्स के साथ उसी तरह माउंट किया जाता है।
useFetch क्या भेजता और साझा करता है
- अनुरोध
GETके साथAccept: application/jsonऔर साइट की कुकीज़ है, इसलिए रूट पृष्ठ के समान सत्र देखता है। - प्रति यूआरएल एक स्थिति:
/api/usersपढ़ने वाले दो घटक एक अनुरोध भेजते हैं और वही डेटा दिखाते हैं। refresh()नया उत्तर आने तक चालूdataरखता है, और एक बार में दो रिफ्रेश एक अनुरोध भेजते हैं।- एक
204उत्तरdataकोundefinedदेता है। - घटक माउंट होने के बाद, अनुरोध ब्राउज़र में भेजा जाता है। डेटा जो पहले HTML के पास होना चाहिए वह सर्वर पर रेंडर किए गए पेज प्रॉप्स में होता है।
मार्ग से त्रुटियाँ
एक उत्तर जो 2xx नहीं है वह error बन जाता है, FetchError के साथ status और detail का मार्ग दिया जाता है। data अपना अंतिम मान रखता है:
from nexy.http import HTTPException from src.data import USERS async def GET(id: int): for user in USERS: if user["id"] == id: return user raise HTTPException(status_code=404, detail="No such user")from fastapi import HTTPExceptionfrom nexy.decorators import Controller from src.data import USERS @Controller("/api/users/{id}")class UserByIdController: async def get(self, id: int): for user in USERS: if user["id"] == id: return user raise HTTPException(status_code=404, detail="No such user")घटक दोनों राउटर में त्रुटि को उसी तरह पढ़ता है:
import { useFetch, FetchError } from "@nexy/client"; export function UserName({ id }: { id: number }) { const { data, error } = useFetch<{ name: string }>(`/api/users/${id}`); if (error instanceof FetchError && error.status === 404) return <p>{String(error.detail)}</p>; return <p>{data?.name}</p>;}किसी कार्रवाई के बाद डेटा पुनः लोड करें
एक क्रिया जो खुले पृष्ठ के लिए revalidate() को कॉल करती है, उस पृष्ठ के प्रत्येक useFetch को फिर से लाती है, एक बार पृष्ठ स्वयं ताज़ा हो जाता है:
from nexy.decorators import Action, revalidate from src.data import USERS @Actionasync def add_user(name: str) -> dict: user = {"id": len(USERS) + 1, "name": name} USERS.append(user) revalidate() return userimport { useAction } from "@nexy/client";import { add_user } from "@nexy/actions"; export function AddUser() { const { run, pending } = useAction(add_user); return <button disabled={pending} onClick={() => run({ name: "Grace" })}>Add Grace</button>;}src/components/Users.tsx की सूची में ग्रेस को refresh() पर कॉल किए बिना दिखाया गया है।
अगले चरण
- क्रियाएँ और नेविगेशन: एक घटक से डेटा बदलें
- क्रियाएँ:
revalidate()और क्रिया चक्र - मॉड्यूलर रूटिंग: उत्तर देने वाले नियंत्रक को लिखें