Server ላይ data ማምጣት፣ cache ማድረግ እና በ background ራሱን ማደስ (refresh) — ይህ ሁሉ በአንድ hook ብቻ ይሰራል!
useState + useEffect እና ከ loading እና error ጋር የምንታገለው አሰልቺ ኮድ (boilerplate) አሁን ያከትማል! 🚀
TanStack Query — the #1 server state management library for React.
React Query (ወይም TanStack Query) — Server ላይ dataን ለማምጣት፣ cache ለማድረግ እንዲሁም background ማዘመኛ (sync) እንዲኖረው የሚያደርግ ታዋቂ React library ነው። ለእነዚህ ስራዎች የምንፅፋቸውን በመቶዎች የሚቆጠሩ የኮድ መስመሮች አያስፈልጉንም!
Eliminates boilerplate for server data — fetching, caching, synchronizing in one library.
npm install @tanstack/react-query
Wrap your app with QueryClientProvider → use useQuery anywhere!
const [data, setData] = useState(null); const [loading, setLoading] = useState(false); const [error, setError] = useState(null); useEffect(() => { setLoading(true); fetch('/api/users') .then(r => r.json()) .then(d => { setData(d); setLoading(false) }) .catch(e => { setError(e); setLoading(false) }); }, []); // ❌ cache ማድረግ የለም, failed ሲያደርግ retry አያደርግም...
import { useQuery } from '@tanstack/react-query'; const { data, isLoading, isError } = useQuery({ queryKey: ['users'], queryFn: () => axios.get('/api/users') .then(r => r.data), }); // ✅ Cache ማድረግ፣ Retry፣ እና Refetch ማድረግ — ሁሉም auto ነው!
const { data, isLoading, isError, error, refetch } = useQuery({ queryKey: ['users'], // ለ Cache የምንጠቀምበት መለያ ነው (Unique መሆን አለበት) queryFn: () => axios.get('/api/users').then(r => r.data), staleTime: 5 * 60 * 1000, // መረጃው ቢያንስ ለ 5 ደቂቃ Fresh (ትኩስ) እንዲሆን retry: 3, // Request አልሳካ ሲል በራሱ 3 ጊዜ ደጋግሞ እንዲሞክር refetchOnWindowFocus: true, // Window focus ሲያገኝ በአዲስ ዳታ ራሱን refresh ያደርጋል! }); if (isLoading) return '⏳ በማምጣት ላይ...'; if (isError) return `❌ የተገኘ ስህተት: ${error.message}`; return data.map(u => <div key={u.id}>{u.name}</div>);
// Data ወደ Server ማስገባት ስንፈልግ Mutation (ሚዩቴሽን) እንጠቀማለን! const qc = useQueryClient(); const mutation = useMutation({ mutationFn: (data) => axios.post('/api/users', data), onSuccess: () => qc.invalidateQueries({ queryKey: ['users'] }), // ✅ ስራውን ሲጨርስ 'onSuccess' ይጠራል → አዲሱ ስም በዝርዝሩ ላይ ቀጥታ ይታያል ማለት ነው! }); <button onClick={() => mutation.mutate({ name: 'Samuel' })} disabled={mutation.isPending}> {mutation.isPending ? '⏳ በመቆጠብ (Saving) ላይ...' : '💾 መዝግብ (Save)'} </button>
ተጨባጭ HTTP Requests እና useQuery እዚህ ሙሉ በሙሉ ይሰራሉ!
በመጠባበቅ፣ በስኬት (Success) እና በስህተቶች ያሉትን Stateዎች በሙሉ በዚህ ክፍል መመልከት ትችላላችሁ!
Simulates exact useQuery behavior with a real public API.
የCache ውስጣዊ ስርዓቶች በህይወት ቆይታቸው ምን ያህል ትኩስ (Stale) እንደሆኑ ማየት ትችላላችሁ።
Watch cache entries go FRESH → STALE → garbage collected.
የuseQuery ውቅረ-ካርታ ሴቲንጎች — ለውጥ (Option) ስታደርጉ በኮዳችሁ ላይ የሚያመጣውን ለውጥ ይመሰክራል።
Explore key options interactively.
import { QueryClient, QueryClientProvider } from '@tanstack/react-query'; import { ReactQueryDevtools } from '@tanstack/react-query-devtools'; // ይህ Query Client ነው - Default ውሳኔዎችን እንደ Stale Time ይወስናል... const queryClient = new QueryClient({ defaultOptions: { queries: { staleTime: 5 * 60 * 1000, retry: 3 } } }); createRoot(document.getElementById('root')).render( <QueryClientProvider client={queryClient}> <App /> {/* Appን ለመቆጣጠር እና ለመከታተል የሚረዳ መሳሪያ */} <ReactQueryDevtools initialIsOpen={false} /> </QueryClientProvider> );
አስፈላጊ የሆኑትን queryKey እና queryFn ብቻ በመጥራት ይይዛቸዋል! (Loading / Error / Data — እነዚህን ራሱ በባህሪው ያስተዳድራል)! No more useState + useEffect + loading + error boilerplate.
POST / PUT / DELETE ተግባራትን በአግባቡ በ useMutation መስራት ትችላላችሁ - ሲያልቅም invalidateQueries ን በመጠቀም አብረው ያሉትን Queryዎች ማደስ ይቻላል! Auto-refetch related queries after data changes.
staleTime = መረጃው ምን ያህል ጊዜ ትኩስ (fresh) ሆኖ እንደሚቆይ የሚወስንበት ሰዓት ነው። cacheTime = መረጃው በካሽ ውስጥ ለምን ያህል ጊዜ ተቀምጦ እንደሚቆይ የሚወስን ነው። staleTime=0 always refetch · staleTime=Infinity never refetch.
ለምሳሌ ['users', userId] ካላችሁ እንደ Parameter ሆኖ ያገለግላል — ለአድራሻው Unique መለያ ኮድ ነው! queryKey is the cache address — must be unique per data source.
በ ReactQueryDevtools አማካኝነት በ Development ጊዜ የካሽን ሁኔታ በሙሉ በቀላሉ መከታተል እና ማሰስ ትችላላችሁ! npm install @tanstack/react-query-devtools
staleTime የሚባለው ምንን የሚወስን ባህሪ ነው?