रिएक्ट एप्लिकेशन बनाते समय, यूआरएल में स्थिति को प्रतिबिंबित करना अक्सर फायदेमंद होता है। यह न केवल स्थिति को साझा करने योग्य बनाता है बल्कि उपयोगकर्ताओं को अपना संदर्भ खोए बिना पृष्ठों को बुकमार्क करने या ताज़ा करने की भी अनुमति देता है। इस पोस्ट में, हम टाइपस्क्रिप्ट में useParamState नामक एक कस्टम रिएक्ट हुक बनाएंगे। यह हुक यूज़स्टेट की तरह काम करेगा, लेकिन यह यूआरएल में खोज पैरामीटर के साथ राज्य को भी सिंक करेगा। महत्वपूर्ण बात यह है कि यह जटिल वस्तु मूल्यों का समर्थन करेगा।
रिएक्ट राउटर का यूज़सर्चपैरम्स हुक यूआरएल खोज पैरामीटर को प्रबंधित करने के लिए उत्कृष्ट है, लेकिन उन्हें घटक स्थिति के साथ समन्वयित करना बोझिल हो सकता है। यूज़परमस्टेट हुक इसे इस प्रकार संबोधित करता है:
(इसका मतलब है कि आप पहले से ही जानते हैं कि रिएक्ट प्रोजेक्ट कैसे सेट करना है, यदि आप Vite पर नहीं गए हैं)
सुनिश्चित करें कि आपने प्रतिक्रिया-राउटर-डोम स्थापित किया है:
npm install react-router-dom
यहां बताया गया है कि आप यूज़परमस्टेट हुक को कैसे कार्यान्वित कर सकते हैं:
import { useCallback, useState } from 'react'; import { useSearchParams } from 'react-router-dom'; /** * A custom hook that syncs state with a URL search parameter. * Supports string, number, boolean, and object values. * @param key The search parameter key to sync with. * @param defaultValue The default value for the state. * @returns A stateful value, and a function to update it. */ function useParamState( key: string, defaultValue: T ): [T, (newValue: Partial | T) => void] { const [searchParams, setSearchParams] = useSearchParams(); const paramValue = searchParams.get(key); const [state, setState] = useState (() => { if (paramValue === null) { return defaultValue; } try { return JSON.parse(paramValue) as T; } catch { return paramValue as T; } }); const setParamState = useCallback( (newValue: Partial | T) => { const updatedValue = typeof newValue === 'object' && !Array.isArray(newValue) ? { ...state, ...newValue } : newValue; setState(updatedValue as T); const newSearchParams = new URLSearchParams(searchParams); newSearchParams.set(key, JSON.stringify(updatedValue)); setSearchParams(newSearchParams); }, [key, searchParams, setSearchParams, state] ); return [state, setParamState]; } export default useParamState;
हुक यह जांच कर शुरू होता है कि यूआरएल में निर्दिष्ट खोज पैरामीटर मौजूद है या नहीं। यदि ऐसा होता है, तो हुक इसे पार्स करता है और इसे प्रारंभिक स्थिति के रूप में उपयोग करता है। अन्यथा, यह वापस दिए गए defaultValue पर आ जाता है।
setParamState फ़ंक्शन URL में आंतरिक स्थिति और खोज पैरामीटर दोनों को अपडेट करता है। यह स्थिति को क्रमबद्ध करने के लिए JSON.stringify का उपयोग करता है, जिससे हमें URL में जटिल ऑब्जेक्ट संग्रहीत करने की अनुमति मिलती है।
हुक टाइपस्क्रिप्ट के जेनरिक और JSON पार्सिंग का लाभ उठाकर विभिन्न प्रकारों (स्ट्रिंग, संख्या, बूलियन और ऑब्जेक्ट) का समर्थन करता है।
आइए देखें कि आप रिएक्ट घटक में यूज़परमस्टेट का उपयोग कैसे कर सकते हैं:
import React from 'react'; import useParamState from './useParamState'; interface FilterState { status: string; sortBy: string; } const MyComponent: React.FC = () => { const [filter, setFilter] = useParamState('filter', { status: 'all', sortBy: 'date', }); return ( ); }; export default MyComponent;Current Filter: {filter.status}, Sort by: {filter.sortBy}
यह सुनिश्चित करने के लिए कि यूज़परमस्टेट हुक अपेक्षा के अनुरूप काम करता है, आप @testing-library/react का उपयोग करके यूनिट परीक्षण लिख सकते हैं:
import { renderHook, act } from '@testing-library/react'; import { MemoryRouter } from 'react-router-dom'; import useParamState from './useParamState'; interface FilterState { status: string; sortBy: string; } test('should sync object state with search params', () => { const wrapper = ({ children }: { children: React.ReactNode }) => ({children} ); const { result } = renderHook(() => useParamState('filter', { status: 'all', sortBy: 'date' }), { wrapper }); // Initial state expect(result.current[0]).toEqual({ status: 'all', sortBy: 'date' }); // Update state and URL act(() => { result.current[1]({ status: 'active', sortBy: 'priority' }); }); // Updated state expect(result.current[0]).toEqual({ status: 'active', sortBy: 'priority' }); });
useParamState हुक यूआरएल खोज मापदंडों के साथ राज्य को सिंक करने की प्रक्रिया को सरल बनाता है, जिससे आपके रिएक्ट एप्लिकेशन अधिक मजबूत और उपयोगकर्ता के अनुकूल बन जाते हैं। ऑब्जेक्ट जैसे जटिल प्रकारों के समर्थन के साथ, यह हुक स्थिति को प्रबंधित करने के लिए एक शक्तिशाली उपकरण है जिसे पेज रीलोड के दौरान जारी रखने या यूआरएल के माध्यम से साझा करने की आवश्यकता होती है।
आप और भी अधिक जटिल डेटा संरचनाओं को संभालने के लिए इस हुक का विस्तार कर सकते हैं, लेकिन अधिकांश उपयोग के मामलों के लिए, यह कार्यान्वयन आपकी आवश्यकताओं को पूरा करेगा।
(लेख पर टिप्पणी करें ताकि मैं इसे बेहतर बना सकूं और जो भी गलतियां हुई हों उन्हें सुधार सकूं, अग्रिम धन्यवाद।)
बेझिझक मुझे अन्य प्लेटफार्मों पर भी फॉलो करें
लिंक्डइन
Github
इंस्टाग्राम
अस्वीकरण: उपलब्ध कराए गए सभी संसाधन आंशिक रूप से इंटरनेट से हैं। यदि आपके कॉपीराइट या अन्य अधिकारों और हितों का कोई उल्लंघन होता है, तो कृपया विस्तृत कारण बताएं और कॉपीराइट या अधिकारों और हितों का प्रमाण प्रदान करें और फिर इसे ईमेल पर भेजें: [email protected] हम इसे आपके लिए यथाशीघ्र संभालेंगे।
Copyright© 2022 湘ICP备2022001581号-3