Edistynyt React Query -integraatio
Hyödyntäkää React Queryn tehokkaita ominaisuuksia, kuten esilatausta, mitätöintiä ja taustalla tehtävää uudelleenhakua, tRPC:n kanssa.
Edistynyt React Query -integraatio on ilmainen tRPC:n tyyppiturvalliset API:t päästä päähän-oppitunti CoddyKitissä. Tämä on oppitunti 2/4. Voit lukea tästä oppimispolusta kokonaan mitkä tahansa 3 oppituntia ilmaiseksi — sen jälkeen CoddyKit PRO avaa kaikki oppitunnit sekä käytännön harjoittelun sisäänrakennetulla koodieditorilla ja ympäri vuorokauden toimivalla tekoälytuutorilla. Oppitunti kuuluu tRPC:n tyyppiturvalliset API:t päästä päähän-oppimispolkuun, ja edistymisesi synkronoituu verkon ja CoddyKit-sovelluksen välillä. tRPC:n tyyppiturvalliset API:t päästä päähän-kurssilla on yhteensä 4 oppituntia.
React Queryn edistyneet ominaisuudet tRPC:n kanssa
Tervetuloa! Tässä oppitunnissa tutustumme React Queryn edistyneisiin ominaisuuksiin, jotka tehostavat tRPC-sovelluksiasi.
Opit optimoimaan käyttökokemusta ja varmistamaan datan ajantasaisuuden tehokkailla tekniikoilla, kuten esilatauksella, kyselyiden mitätöinnillä ja taustalla tapahtuvalla uudelleenhaulla.
Käyttökokemuksen parantaminen esilatauksella
Esilataus tarkoittaa datan hakemista ennen kuin käyttäjä pyytää sitä nimenomaisesti. Kuvitellaan blogiluettelo: kun käyttäjä vie hiiren julkaisun päälle, voit esiladata julkaisun yksityiskohtaisen sisällön.
- Nopeampi navigointi: Lyhentää latausaikoja, kun käyttäjä napsauttaa linkkiä.
- Sujuvampi käyttökokemus: Poistaa latausilmaisimet seuraaville sivuille siirryttäessä.
- Ennakoiva käyttöliittymä: Saa sovelluksen tuntumaan nopeammalta ja reagoivammalta.
tRPC-kyselyiden esilataus
React Queryn queryClient.prefetchQuery mahdollistaa datan hakemisen ja tallentamisen välimuistiin. tRPC:n kanssa käytät queryClient-oliota trpc.useUtils()-funktion kautta.
Tässä esimerkissä simuloidaan julkaisuluettelon esilataamista komponentin renderöinnin yhteydessä, esimerkiksi kotisivulla ennen kuin käyttäjä napsauttaa ”Näytä kaikki julkaisut”.
// A simplified demo for prefetching a tRPC query
// --- Mocks for demonstration purposes ---
const mockQueryClient = {
prefetchQuery: async (queryKey, queryFn) => {
console.log(`Prefetching: ${JSON.stringify(queryKey)}`);
// Simulate API call
const data = await queryFn();
console.log(`Data for ${JSON.stringify(queryKey)} prefetched:`, data);
return data;
}
};
const trpc = {
post: {
list: {
queryFn: async () => {
// In a real app, this would be your tRPC query
return new Promise(resolve => setTimeout(() => {
resolve([{ id: 1, title: 'First Post' }, { id: 2, title: 'Second Post' }]);
}, 100));
}
}
},
useUtils: () => ({
queryClient: mockQueryClient
})
};
// --- End Mocks ---
async function main() {
console.log("Starting prefetch demo...");
// In a React component, you'd call trpc.useUtils()
const utils = trpc.useUtils();
// Prefetch the 'post.list' query
await utils.queryClient.prefetchQuery(
['post', 'list'], // tRPC query key
trpc.post.list.queryFn // The actual fetch function
);
console.log("Prefetching complete. Data is now in cache.");
}
main();Datan ajantasaisuuden säilyttäminen mitätöinnillä
Kun suoritat taustajärjestelmässä dataa muuttavan toiminnon (kuten luonnin, päivityksen tai poiston), asiakaspuolen välimuisti saattaa vanhentua.
Kyselyn mitätöinti ilmoittaa React Querylle, että tietyt välimuistissa olevat datat ovat ”vanhentuneita” ja ne on haettava uudelleen seuraavan käyttökerran yhteydessä. Näin käyttöliittymä näyttää aina uusimmat tiedot.
Mitätöinti tRPC-mutaatioiden jälkeen
Yleisin mitätöinnin käyttötapaus on sen suorittaminen mutation jälkeen. Kun luot uuden kohteen, haluat kaikkia kohteita näyttävän luettelon päivittyvän automaattisesti.
Voit käyttää useMutation-hookin onSuccess-callbackia liittyvien kyselyiden mitätöintiin.
// A simplified demo for invalidating a tRPC query after a mutation
// --- Mocks for demonstration purposes ---
const mockQueryClient = {
invalidateQueries: (queryKey) => {
console.log(`Invalidating queries matching: ${JSON.stringify(queryKey)}`);
// In a real app, this marks cached data as stale
}
};
const trpc = {
post: {
create: {
mutateFn: async (newPost) => {
console.log(`Creating post: ${newPost.title}...`);
return new Promise(resolve => setTimeout(() => {
console.log("Post created on server.");
resolve({ id: 3, ...newPost });
}, 150));
}
}
},
useUtils: () => ({
queryClient: mockQueryClient
})
};
// Simulate a useMutation hook's logic
async function useCreatePostMutation() {
const utils = trpc.useUtils();
return {
mutateAsync: async (newPost) => {
const result = await trpc.post.create.mutateFn(newPost);
// Invalidate the 'post.list' query to refetch it
utils.queryClient.invalidateQueries(['post', 'list']);
return result;
}
};
}
// --- End Mocks ---
async function main() {
console.log("Starting invalidation demo...");
const { mutateAsync } = await useCreatePostMutation();
await mutateAsync({ title: 'My New Awesome Post' });
console.log("Mutation complete and 'post.list' query invalidated.");
console.log("Next time 'post.list' is fetched, it will be fresh.");
}
main();Tiettyihin kyselyihin kohdistaminen
Joskus et halua mitätöidä kaikkia tietyn tyyppisiä kyselyitä. Saatat haluta mitätöidä tietyn kohteen, kuten yksittäisen julkaisun sen päivityksen jälkeen.
React Query käyttää kyselyavaimia välimuistissa olevan datan tunnistamiseen. Voit mitätöidä kyselyitä täsmällisten avainten tai osittaisten täsmäytysten perusteella.
// Demo for granular invalidation
// --- Mocks ---
const mockQueryClient = {
invalidateQueries: (queryKey) => {
console.log(`Invalidating specific queries: ${JSON.stringify(queryKey)}`);
}
};
const trpc = {
post: {
update: {
mutateFn: async (postId, updates) => {
console.log(`Updating post ${postId} with:`, updates);
return new Promise(resolve => setTimeout(() => {
console.log(`Post ${postId} updated.`);
resolve({ id: postId, ...updates });
}, 100));
}
}
},
useUtils: () => ({
queryClient: mockQueryClient
})
};
async function useUpdatePostMutation() {
const utils = trpc.useUtils();
return {
mutateAsync: async (postId, updates) => {
const result = await trpc.post.update.mutateFn(postId, updates);
// Invalidate the specific post query by ID
utils.queryClient.invalidateQueries(['post', 'byId', { id: postId }]);
// You might also invalidate the list if the update affects it
utils.queryClient.invalidateQueries(['post', 'list']);
return result;
}
};
}
// --- End Mocks ---
async function main() {
console.log("Starting granular invalidation demo...");
const { mutateAsync } = await useUpdatePostMutation();
const postIdToUpdate = 123;
await mutateAsync(postIdToUpdate, { title: 'Updated Title' });
console.log(`Queries for post ${postIdToUpdate} and post list invalidated.`);
}
main();Automaattinen taustalla tapahtuva uudelleenhaku
React Query ei hae dataa uudelleen ainoastaan silloin, kun mitätöit sen manuaalisesti. Siinä on myös älykkäät oletusasetukset taustalla tapahtuvalle uudelleenhaulle.
Kun kysely muuttuu ”vanhentuneeksi” (sen staleTime umpeutuu), React Query hakee sen tietyissä tilanteissa automaattisesti uudelleen taustalla, esimerkiksi:
- Kun komponentti liitetään.
- Kun ikkunan fokus palautuu.
- Kun verkkoyhteys muodostetaan uudelleen.
Uudelleenhaun toiminnan mukauttaminen
Voit hallita staleTime-asetuksella, milloin data katsotaan vanhentuneeksi. Oletusarvoisesti staleTime on 0, mikä tarkoittaa, että data vanhentuu välittömästi.
Kun määrität staleTime-arvon (esimerkiksi 5 * 60 * 1000 viidelle minuutille), dataa ei haeta uudelleen kyseisen ajan kuluessa, vaikka komponentit liitettäisiin uudelleen tai ikkunan fokus palautuisi. Tämä parantaa suorituskykyä.
// Demo for configuring staleTime globally
// --- Mocks ---
class QueryClient {
constructor(options = {}) {
this.defaultOptions = options.defaultOptions || {};
console.log("QueryClient initialized with defaultOptions:", this.defaultOptions);
}
// Simplified method to show it would apply options
fetchQuery(queryKey, queryFn, options = {}) {
const effectiveStaleTime = options.staleTime !== undefined
? options.staleTime
: (this.defaultOptions.queries && this.defaultOptions.queries.staleTime !== undefined
? this.defaultOptions.queries.staleTime
: 0); // Default React Query staleTime
console.log(`Fetching ${JSON.stringify(queryKey)} with staleTime: ${effectiveStaleTime}`);
return queryFn(); // Simulate fetch
}
}
// Simulating React Query's QueryClientProvider setup
function QueryClientProvider({ children, client }) {
console.log("QueryClientProvider is setting up the client.");
// In a real React app, 'client' would be available via context
if (typeof children === 'function') {
children(client); // Just call the child function for this demo
}
}
// --- End Mocks ---
async function main() {
console.log("Starting staleTime configuration demo...");
const queryClient = new QueryClient({
defaultOptions: {
queries: {
staleTime: 1000 * 60 * 5, // 5 minutes
refetchOnWindowFocus: false, // Disable refetch on window focus globally
},
},
});
QueryClientProvider({
client: queryClient,
children: async (client) => {
// Simulate a tRPC query being made, which would inherit these options
await client.fetchQuery(['myPost', 1], async () => {
console.log("Simulating a fetch for 'myPost'.");
return { id: 1, title: "Configured Post" };
});
}
});
console.log("QueryClient configured. Queries will respect 5 min staleTime.");
}
main();Kokonainen työnkulkuesimerkki
Kuvitellaan käyttäjän työnkulku, jossa nämä ominaisuudet yhdistyvät:
- Käyttäjä siirtyy hallintapaneeliin. Esilataamme tulevien osioiden datan.
- Käyttäjä napsauttaa ”Muokkaa profiilia”. Profiilin data on jo välimuistissa (esilatauksen tai äskettäisen haun ansiosta).
- Käyttäjä päivittää nimensä. Mutaatio käynnistyy.
- Onnistumisen jälkeen profiilikysely mitätöidään.
- Käyttöliittymä hakee datan automaattisesti uudelleen taustalla (mitätöinnin ja mahdollisesti profiilikyselyn
staleTime: 0-asetuksen ansiosta) ja näyttää uuden nimen ilman koko sivun uudelleenlatausta tai manuaalista päivitystä.
React Query -ominaisuuksien tietovisa
Ajatellaan tRPC-sovellusta, jossa on tuoteluettelo ja lomake uuden tuotteen lisäämistä varten.
Mitä React Queryn ominaisuuksien yhdistelmää käyttäisitte tuoteluettelon päivittämiseen heti, kun uusi tuote on lisätty onnistuneesti?
Edistyneiden ominaisuuksien yhteenveto
Hienoa työtä! Olette oppineet hyödyntämään React Queryn edistyneitä ominaisuuksia suorituskykyisten ja käyttäjäystävällisten tRPC-sovellusten rakentamiseen.
- Esilataus parantaa koettua suorituskykyä lataamalla tiedot etukäteen.
- Kyselyiden mitätöinti varmistaa tietojen ajantasaisuuden mutaatioiden jälkeen.
- Taustalla tapahtuva uudelleenlataus päivittää vanhentuneet tiedot automaattisesti.
Nämä tekniikat ovat olennaisia ammattitasoista käyttöliittymäkehitystä varten. Jatkakaa niiden kokeilemista!
Opi tRPC:n tyyppiturvalliset API:t päästä päähän tekoälytuutorin avulla — ilmaiseksi
Kirjoita ja suorita oikeaa koodia selaimessa, saa välitöntä apua tekoälytuutorilta ympäri vuorokauden ja jatka siitä, mihin jäit, verkossa tai sovelluksessa.
- Kurssit
- 10
- Oppitunnit
- 40
Usein kysytyt kysymykset
Onko oppitunti ”Edistynyt React Query -integraatio” ilmainen?
Kyllä — voit lukea täällä verkossa kokonaan ilmaiseksi mitkä tahansa tRPC:n tyyppiturvalliset API:t päästä päähän-oppimispolun 3 oppituntia, myös oppitunnin “Edistynyt React Query -integraatio”. Sen jälkeen CoddyKit PRO avaa kaikki oppitunnit sekä interaktiiviset harjoitukset sisäänrakennetulla koodieditorilla ja ympäri vuorokauden toimivalla tekoälytuutorilla. tRPC:n tyyppiturvalliset API:t päästä päähän-kurssilla on yhteensä 4 oppituntia.
Mitä opin oppitunnilla ”Edistynyt React Query -integraatio”?
Hyödyntäkää React Queryn tehokkaita ominaisuuksia, kuten esilatausta, mitätöintiä ja taustalla tehtävää uudelleenhakua, tRPC:n kanssa. Harjoittelet tRPC:n tyyppiturvalliset API:t päästä päähän-aihetta koodilla, jonka suoritat suoraan selaimessa. Ympäri vuorokauden käytettävissä oleva tekoälytuutori vastaa kysymyksiisi oppitunnin aikana.
Tarvitsenko kokemusta aloittaakseni tRPC:n tyyppiturvalliset API:t päästä päähän-opiskelun?
Aiempi kokemus ei ole tarpeen. CoddyKitin tRPC:n tyyppiturvalliset API:t päästä päähän-oppimispolku sopii vasta-alkajista edistyneisiin, joten voit aloittaa tästä tai alusta ja edetä omaan tahtiisi. Tämä on oppitunti 2/4.
Kuinka kauan ”Edistynyt React Query -integraatio”-oppitunnin suorittaminen kestää?
Useimmat CoddyKitin oppitunnit kestävät noin 5–10 minuuttia. Jokainen oppitunti on lyhyt ja interaktiivinen, joten edistyt tasaisesti ja voit jatkaa siitä, mihin jäit – sekä verkossa että sovelluksessa.
Voinko kirjoittaa ja suorittaa koodia tällä tRPC:n tyyppiturvalliset API:t päästä päähän-oppitunnilla?
Kyllä. Jokainen tRPC:n tyyppiturvalliset API:t päästä päähän-oppitunti sisältää sisäänrakennetun koodieditorin, joten voit kirjoittaa ja suorittaa oikeaa koodia suoraan selaimessa ja saada välitöntä palautetta tekoälyltä – paikallista asennusta ei tarvita.
Kaikki tämän kurssin oppitunnit
- tRPC Next.js App Routerissa
- Edistynyt React Query -integraatio
- Palvelinkomponentit ja tRPC-tietojenhaku
- Optimistiset päivitykset tRPC-mutaatioilla