Utveckling av Sökfunktionalitet
Teori
Innan sökfunktionen implementeras är det viktigt att förstå dessa klient-hooks.
useSearchParams;- Ger åtkomst till aktuella URL-parametrar;
- Exempel: För URL:en
/dashboard/invoices?page=1&query=pendingreturneras{page: '1', query: 'pending'}.
usePathname;- Läser av den aktuella URL:ens sökväg;
- Exempel: För routen
domain/dashboard/invoicesreturnerarusePathname"/dashboard/invoices".
useRouter.- Underlättar navigering mellan rutter i klientkomponenter och erbjuder flera metoder.
Översikt av implementeringssteg:
- Fånga användarens inmatning;
- Uppdatera URL:en med sökparametrar;
- Håll URL:en synkroniserad med inmatningsfältet;
- Uppdatera tabellen för att återspegla sökfrågan.
Tillbaka till projektet
1. Fånga användarens inmatning
- Öppna
Search-komponenten (app/ui/search.tsx); - Observera användningen av
'use client', vilket indikerar tillgänglighet för eventlyssnare och hooks; - Använd funktionen
handleSearch, som utlöses vid varje ändring i inmatningsfältet.
Efter implementering, öppna utvecklarkonsolen i din webbläsare. All text som matas in i inmatningsfältet ska nu visas i webbläsarens konsol.
2. Uppdatera URL:en med sökparametrar
- Importera hooken
useSearchParamsfrån'next/navigation'och tilldela den till en variabel; - Skapa inuti funktionen
handleSearchen ny instans avURLSearchParamsmed hjälp av den tidigare definierade variabeln (searchParams). Detta verktyg tillhandahåller metoder för att hantera URL:ens frågeparametrar; - Ange parametersträngen baserat på användarens inmatning. Om inmatningen är tom, ta bort den;
- Använd hookarna
useRouterochusePathnamefrån'next/navigation'och använd metodenreplacefrånuseRouter()ihandleSearch.${pathname}representerar den aktuella sökvägen, t.ex."/dashboard/invoices";- När användaren skriver i sökfältet konverterar
params.toString()inmatningen till ett URL-vänligt format; replace(${pathname}?${params.toString()})uppdaterar URL:en med användarens sökdata (t.ex./dashboard/invoices?query=qwerty).
URL:en uppdateras utan sidomladdning tack vare Next.js klientbaserade navigering.
Efter implementering kommer all text som skrivs in i fältet att återspeglas i URL:en.
3. Håll URL:en synkroniserad med inmatningsfältet
För att säkerställa att inmatningsfältet matchar URL:en och fylls i när den delas, använd defaultValue genom att läsa från searchParams.
4. Uppdatera tabellen för att återspegla sökfrågan
Slutligen uppdaterar vi Table-komponenten för att återspegla sökfrågan. Sidkomponenter accepterar en prop som heter searchParams. Skicka aktuella URL-parametrar till <Table>-komponenten.
Glöm inte att avkommentera Table-komponenten.
Fantastiskt! Du har nu lagt till sökfunktionalitet i din app. Prova gärna – fungerar det? 😊
I nästa kapitel går vi igenom paginering eftersom endast 6 fakturor för närvarande visas på sidan.
I praktiken
Tack för dina kommentarer!
Fråga AI
Fråga AI
Fråga vad du vill eller prova någon av de föreslagna frågorna för att starta vårt samtal
Can you explain how the useSearchParams hook works in more detail?
How does the Table component use the query and currentPage props to filter data?
What should I do if the search input and URL are not staying in sync?
Awesome!
Completion rate improved to 2.08
Utveckling av Sökfunktionalitet
Svep för att visa menyn
Teori
Innan sökfunktionen implementeras är det viktigt att förstå dessa klient-hooks.
useSearchParams;- Ger åtkomst till aktuella URL-parametrar;
- Exempel: För URL:en
/dashboard/invoices?page=1&query=pendingreturneras{page: '1', query: 'pending'}.
usePathname;- Läser av den aktuella URL:ens sökväg;
- Exempel: För routen
domain/dashboard/invoicesreturnerarusePathname"/dashboard/invoices".
useRouter.- Underlättar navigering mellan rutter i klientkomponenter och erbjuder flera metoder.
Översikt av implementeringssteg:
- Fånga användarens inmatning;
- Uppdatera URL:en med sökparametrar;
- Håll URL:en synkroniserad med inmatningsfältet;
- Uppdatera tabellen för att återspegla sökfrågan.
Tillbaka till projektet
1. Fånga användarens inmatning
- Öppna
Search-komponenten (app/ui/search.tsx); - Observera användningen av
'use client', vilket indikerar tillgänglighet för eventlyssnare och hooks; - Använd funktionen
handleSearch, som utlöses vid varje ändring i inmatningsfältet.
Efter implementering, öppna utvecklarkonsolen i din webbläsare. All text som matas in i inmatningsfältet ska nu visas i webbläsarens konsol.
2. Uppdatera URL:en med sökparametrar
- Importera hooken
useSearchParamsfrån'next/navigation'och tilldela den till en variabel; - Skapa inuti funktionen
handleSearchen ny instans avURLSearchParamsmed hjälp av den tidigare definierade variabeln (searchParams). Detta verktyg tillhandahåller metoder för att hantera URL:ens frågeparametrar; - Ange parametersträngen baserat på användarens inmatning. Om inmatningen är tom, ta bort den;
- Använd hookarna
useRouterochusePathnamefrån'next/navigation'och använd metodenreplacefrånuseRouter()ihandleSearch.${pathname}representerar den aktuella sökvägen, t.ex."/dashboard/invoices";- När användaren skriver i sökfältet konverterar
params.toString()inmatningen till ett URL-vänligt format; replace(${pathname}?${params.toString()})uppdaterar URL:en med användarens sökdata (t.ex./dashboard/invoices?query=qwerty).
URL:en uppdateras utan sidomladdning tack vare Next.js klientbaserade navigering.
Efter implementering kommer all text som skrivs in i fältet att återspeglas i URL:en.
3. Håll URL:en synkroniserad med inmatningsfältet
För att säkerställa att inmatningsfältet matchar URL:en och fylls i när den delas, använd defaultValue genom att läsa från searchParams.
4. Uppdatera tabellen för att återspegla sökfrågan
Slutligen uppdaterar vi Table-komponenten för att återspegla sökfrågan. Sidkomponenter accepterar en prop som heter searchParams. Skicka aktuella URL-parametrar till <Table>-komponenten.
Glöm inte att avkommentera Table-komponenten.
Fantastiskt! Du har nu lagt till sökfunktionalitet i din app. Prova gärna – fungerar det? 😊
I nästa kapitel går vi igenom paginering eftersom endast 6 fakturor för närvarande visas på sidan.
I praktiken
Tack för dina kommentarer!