కస్టమ్ హుక్స్తో మీ రియాక్ట్ అప్లికేషన్లలో పునర్వినియోగ లాజిక్ శక్తిని అన్లాక్ చేయండి. క్లీనర్, మరింత మెయింటెయిన్ చేయగల కోడ్ కోసం కస్టమ్ హుక్స్ను ఎలా సృష్టించాలో మరియు ఉపయోగించుకోవాలో తెలుసుకోండి.
కస్టమ్ హుక్స్: రియాక్ట్లో పునర్వినియోగ లాజిక్ నమూనాలు
రియాక్ట్ హుక్స్ ఫంక్షనల్ కాంపోనెంట్లకు స్టేట్ మరియు లైఫ్సైకిల్ ఫీచర్లను పరిచయం చేయడం ద్వారా మనం రియాక్ట్ కాంపోనెంట్లను వ్రాసే విధానంలో విప్లవాత్మక మార్పులు తెచ్చాయి. అవి అందించే అనేక ప్రయోజనాలలో, కస్టమ్ హుక్స్ బహుళ కాంపోనెంట్లలో లాజిక్ను సంగ్రహించడానికి మరియు తిరిగి ఉపయోగించుకోవడానికి ఒక శక్తివంతమైన మెకానిజంగా నిలుస్తాయి. ఈ బ్లాగ్ పోస్ట్ కస్టమ్ హుక్స్ ప్రపంచంలోకి లోతుగా వెళ్తుంది, వాటి ప్రయోజనాలు, సృష్టి మరియు ఆచరణాత్మక ఉదాహరణలతో వాడకాన్ని అన్వేషిస్తుంది.
కస్టమ్ హుక్స్ అంటే ఏమిటి?
సారాంశంలో, కస్టమ్ హుక్ అనేది "use" అనే పదంతో ప్రారంభమయ్యే జావాస్క్రిప్ట్ ఫంక్షన్ మరియు ఇది ఇతర హుక్స్ను పిలవగలదు. అవి కాంపోనెంట్ లాజిక్ను పునర్వినియోగ ఫంక్షన్లుగా సంగ్రహించడానికి మిమ్మల్ని అనుమతిస్తాయి. రెండర్ ప్రాప్స్, హయ్యర్-ఆర్డర్ కాంపోనెంట్స్ లేదా ఇతర సంక్లిష్ట నమూనాలను ఆశ్రయించకుండా కాంపోనెంట్ల మధ్య స్టేట్ఫుల్ లాజిక్, సైడ్ ఎఫెక్ట్స్ లేదా ఇతర సంక్లిష్ట ప్రవర్తనలను పంచుకోవడానికి ఇది ఒక శక్తివంతమైన మార్గం.
కస్టమ్ హుక్స్ యొక్క ముఖ్య లక్షణాలు:
- పేరు పెట్టే విధానం: కస్టమ్ హుక్స్ తప్పనిసరిగా "use" అనే పదంతో ప్రారంభం కావాలి. ఇది ఫంక్షన్లో హుక్స్ ఉన్నాయని రియాక్ట్కు సూచిస్తుంది మరియు హుక్స్ నియమాలను అనుసరించాలి.
- పునర్వినియోగం: ప్రాథమిక ఉద్దేశ్యం పునర్వినియోగ లాజిక్ను సంగ్రహించడం, కాంపోనెంట్ల మధ్య కార్యాచరణను పంచుకోవడం సులభం చేస్తుంది.
- స్టేట్ఫుల్ లాజిక్: కస్టమ్ హుక్స్
useState
హుక్ని ఉపయోగించి తమ సొంత స్టేట్ను నిర్వహించగలవు, ఇది సంక్లిష్టమైన స్టేట్ఫుల్ ప్రవర్తనను సంగ్రహించడానికి వీలు కల్పిస్తుంది. - సైడ్ ఎఫెక్ట్స్: అవి
useEffect
హుక్ని ఉపయోగించి సైడ్ ఎఫెక్ట్స్ను కూడా చేయగలవు, బాహ్య APIలతో ఇంటిగ్రేషన్, డేటా ఫెచింగ్ మరియు మరిన్నింటిని ఎనేబుల్ చేస్తాయి. - కంపోజబుల్: కస్టమ్ హుక్స్ ఇతర హుక్స్ను పిలవగలవు, ఇది చిన్న, మరింత ఫోకస్డ్ హుక్స్ను కంపోజ్ చేయడం ద్వారా సంక్లిష్ట లాజిక్ను నిర్మించడానికి మిమ్మల్ని అనుమతిస్తుంది.
కస్టమ్ హుక్స్ ఉపయోగించడం వల్ల కలిగే ప్రయోజనాలు
రియాక్ట్ డెవలప్మెంట్లో కస్టమ్ హుక్స్ అనేక ముఖ్యమైన ప్రయోజనాలను అందిస్తాయి:
- కోడ్ పునర్వినియోగం: బహుళ కాంపోనెంట్లలో లాజిక్ను తిరిగి ఉపయోగించుకునే సామర్థ్యం అత్యంత స్పష్టమైన ప్రయోజనం. ఇది కోడ్ డూప్లికేషన్ను తగ్గిస్తుంది మరియు మరింత DRY (డోంట్ రిపీట్ యువర్సెల్ఫ్) కోడ్బేస్ను ప్రోత్సహిస్తుంది.
- మెరుగైన చదవడానికి వీలుగా ఉండటం: సంక్లిష్టమైన లాజిక్ను ప్రత్యేక కస్టమ్ హుక్స్గా సంగ్రహించడం ద్వారా, మీ కాంపోనెంట్లు శుభ్రంగా మరియు సులభంగా అర్థం చేసుకోవడానికి వీలుగా మారతాయి. కోర్ కాంపోనెంట్ లాజిక్ UIని రెండర్ చేయడంపై దృష్టి పెడుతుంది.
- మెరుగైన నిర్వహణ: లాజిక్ను కస్టమ్ హుక్స్లో సంగ్రహించినప్పుడు, మార్పులు మరియు బగ్ పరిష్కారాలు ఒకే చోట వర్తింపజేయబడతాయి, బహుళ కాంపోనెంట్లలో లోపాలను ప్రవేశపెట్టే ప్రమాదాన్ని తగ్గిస్తుంది.
- పరీక్షించడానికి వీలుగా ఉండటం: కస్టమ్ హుక్స్ను సులభంగా విడిగా పరీక్షించవచ్చు, పునర్వినియోగ లాజిక్ వాటిని ఉపయోగించే కాంపోనెంట్లతో సంబంధం లేకుండా సరిగ్గా పనిచేస్తుందని నిర్ధారిస్తుంది.
- సరళీకృత కాంపోనెంట్లు: కస్టమ్ హుక్స్ కాంపోనెంట్లను క్లట్టర్ లేకుండా చేయడంలో సహాయపడతాయి, వాటిని తక్కువ వెర్బోస్గా మరియు వాటి ప్రాథమిక ప్రయోజనంపై ఎక్కువ దృష్టి కేంద్రీకరించేలా చేస్తాయి.
మీ మొదటి కస్టమ్ హుక్ను సృష్టించడం
విండో పరిమాణాన్ని ట్రాక్ చేసే హుక్ అనే ఒక ఆచరణాత్మక ఉదాహరణతో కస్టమ్ హుక్ యొక్క సృష్టిని వివరిద్దాం.
ఉదాహరణ: useWindowSize
ఈ హుక్ బ్రౌజర్ విండో యొక్క ప్రస్తుత వెడల్పు మరియు ఎత్తును అందిస్తుంది. విండో పరిమాణం మార్చబడినప్పుడు ఇది ఈ విలువలను కూడా అప్డేట్ చేస్తుంది.
import { useState, useEffect } from 'react';
function useWindowSize() {
const [windowSize, setWindowSize] = useState({
width: window.innerWidth,
height: window.innerHeight,
});
useEffect(() => {
function handleResize() {
setWindowSize({
width: window.innerWidth,
height: window.innerHeight,
});
}
window.addEventListener('resize', handleResize);
// Remove event listener on cleanup
return () => window.removeEventListener('resize', handleResize);
}, []); // Empty array ensures that effect is only run on mount
return windowSize;
}
export default useWindowSize;
వివరణ:
- అవసరమైన హుక్స్ దిగుమతి చేయండి: మేము రియాక్ట్ నుండి
useState
మరియుuseEffect
లను దిగుమతి చేస్తాము. - హుక్ను నిర్వచించండి: మేము పేరు పెట్టే నియమానికి కట్టుబడి
useWindowSize
అనే ఫంక్షన్ను సృష్టిస్తాము. - స్టేట్ను ప్రారంభించండి: విండో యొక్క ప్రారంభ వెడల్పు మరియు ఎత్తుతో
windowSize
స్టేట్ను ప్రారంభించడానికి మేముuseState
ని ఉపయోగిస్తాము. - ఈవెంట్ లిజనర్ను సెటప్ చేయండి: విండోకు రీసైజ్ ఈవెంట్ లిజనర్ను జోడించడానికి మేము
useEffect
ని ఉపయోగిస్తాము. విండో పరిమాణం మార్చబడినప్పుడు,handleResize
ఫంక్షన్windowSize
స్టేట్ను అప్డేట్ చేస్తుంది. - క్లీనప్: కాంపోనెంట్ అన్మౌంట్ అయినప్పుడు ఈవెంట్ లిజనర్ను తీసివేయడానికి మేము
useEffect
నుండి ఒక క్లీనప్ ఫంక్షన్ను తిరిగి ఇస్తాము. ఇది మెమరీ లీక్లను నివారిస్తుంది. - విలువలను తిరిగి ఇవ్వండి: హుక్
windowSize
ఆబ్జెక్ట్ను తిరిగి ఇస్తుంది, ఇందులో విండో యొక్క ప్రస్తుత వెడల్పు మరియు ఎత్తు ఉంటాయి.
ఒక కాంపోనెంట్లో కస్టమ్ హుక్ను ఉపయోగించడం
ఇప్పుడు మనం మన కస్టమ్ హుక్ను సృష్టించాము, దాన్ని రియాక్ట్ కాంపోనెంట్లో ఎలా ఉపయోగించాలో చూద్దాం.
import React from 'react';
import useWindowSize from './useWindowSize';
function MyComponent() {
const { width, height } = useWindowSize();
return (
Window width: {width}px
Window height: {height}px
);
}
export default MyComponent;
వివరణ:
- హుక్ను దిగుమతి చేయండి: మేము
useWindowSize
కస్టమ్ హుక్ను దిగుమతి చేస్తాము. - హుక్ను కాల్ చేయండి: మేము కాంపోనెంట్లో
useWindowSize
హుక్ను కాల్ చేస్తాము. - విలువలను యాక్సెస్ చేయండి:
width
మరియుheight
విలువలను పొందడానికి మేము తిరిగి వచ్చిన ఆబ్జెక్ట్ను డిస్ట్రక్చర్ చేస్తాము. - విలువలను రెండర్ చేయండి: మేము కాంపోనెంట్ UIలో వెడల్పు మరియు ఎత్తు విలువలను రెండర్ చేస్తాము.
useWindowSize
ని ఉపయోగించే ఏదైనా కాంపోనెంట్ విండో పరిమాణం మారినప్పుడు ఆటోమేటిక్గా అప్డేట్ అవుతుంది.
మరింత సంక్లిష్ట ఉదాహరణలు
కస్టమ్ హుక్స్ కోసం మరికొన్ని అధునాతన వినియోగ సందర్భాలను అన్వేషిద్దాం.
ఉదాహరణ: useLocalStorage
ఈ హుక్ లోకల్ స్టోరేజ్ నుండి డేటాను సులభంగా నిల్వ చేయడానికి మరియు తిరిగి పొందడానికి మిమ్మల్ని అనుమతిస్తుంది.
import { useState, useEffect } from 'react';
function useLocalStorage(key, initialValue) {
// State to store our value
// Pass initial value to useState so logic is only executed once
const [storedValue, setStoredValue] = useState(() => {
try {
// Get from local storage by key
const item = window.localStorage.getItem(key);
// Parse stored json or if none return initialValue
return item ? JSON.parse(item) : initialValue;
} catch (error) {
// If error also return initialValue
console.log(error);
return initialValue;
}
});
// Return a wrapped version of useState's setter function that ...
// ... persists the new value to localStorage.
const setValue = (value) => {
try {
// Allow value to be a function so we have same API as useState
const valueToStore = value instanceof Function ? value(storedValue) : value;
// Save to local storage
window.localStorage.setItem(key, JSON.stringify(valueToStore));
// Save state
setStoredValue(valueToStore);
} catch (error) {
// A more advanced implementation would handle the error case
console.log(error);
}
};
useEffect(() => {
try {
const item = window.localStorage.getItem(key);
setStoredValue(item ? JSON.parse(item) : initialValue);
} catch (error) {
console.log(error);
}
}, [key, initialValue]);
return [storedValue, setValue];
}
export default useLocalStorage;
వినియోగం:
import React from 'react';
import useLocalStorage from './useLocalStorage';
function MyComponent() {
const [name, setName] = useLocalStorage('name', 'Guest');
return (
Hello, {name}!
setName(e.target.value)}
/>
);
}
export default MyComponent;
ఉదాహరణ: useFetch
ఈ హుక్ API నుండి డేటాను ఫెచ్ చేసే లాజిక్ను సంగ్రహిస్తుంది.
import { useState, useEffect } from 'react';
function useFetch(url) {
const [data, setData] = useState(null);
const [loading, setLoading] = useState(true);
const [error, setError] = useState(null);
useEffect(() => {
async function fetchData() {
try {
const response = await fetch(url);
if (!response.ok) {
throw new Error(`HTTP error! status: ${response.status}`);
}
const json = await response.json();
setData(json);
setLoading(false);
} catch (error) {
setError(error);
setLoading(false);
}
}
fetchData();
}, [url]);
return { data, loading, error };
}
export default useFetch;
వినియోగం:
import React from 'react';
import useFetch from './useFetch';
function MyComponent() {
const { data, loading, error } = useFetch('https://jsonplaceholder.typicode.com/todos/1');
if (loading) return Loading...
;
if (error) return Error: {error.message}
;
return (
Title: {data.title}
Completed: {data.completed ? 'Yes' : 'No'}
);
}
export default MyComponent;
కస్టమ్ హుక్స్ కోసం ఉత్తమ పద్ధతులు
మీ కస్టమ్ హుక్స్ ప్రభావవంతంగా మరియు నిర్వహించగలిగేలా ఉండేలా చూసుకోవడానికి, ఈ ఉత్తమ పద్ధతులను అనుసరించండి:
- వాటిని ఫోకస్డ్గా ఉంచండి: ప్రతి కస్టమ్ హుక్కు ఒకే, స్పష్టంగా నిర్వచించబడిన ఉద్దేశ్యం ఉండాలి. చాలా ఎక్కువ చేయడానికి ప్రయత్నించే అతి సంక్లిష్టమైన హుక్స్ను సృష్టించడం మానుకోండి.
- మీ హుక్స్ను డాక్యుమెంట్ చేయండి: ప్రతి కస్టమ్ హుక్కు స్పష్టమైన మరియు సంక్షిప్త డాక్యుమెంటేషన్ను అందించండి, దాని ఉద్దేశ్యం, ఇన్పుట్లు మరియు అవుట్పుట్లను వివరిస్తుంది.
- మీ హుక్స్ను పరీక్షించండి: మీ కస్టమ్ హుక్స్ సరిగ్గా మరియు విశ్వసనీయంగా పనిచేస్తాయని నిర్ధారించుకోవడానికి వాటి కోసం యూనిట్ పరీక్షలను వ్రాయండి.
- వివరణాత్మక పేర్లను ఉపయోగించండి: మీ కస్టమ్ హుక్స్కు వాటి ఉద్దేశ్యాన్ని స్పష్టంగా సూచించే వివరణాత్మక పేర్లను ఎంచుకోండి.
- లోపాలను సునాయాసంగా నిర్వహించండి: ఊహించని ప్రవర్తనను నివారించడానికి మరియు సమాచార లోప సందేశాలను అందించడానికి మీ కస్టమ్ హుక్స్లో ఎర్రర్ హ్యాండ్లింగ్ను అమలు చేయండి.
- పునర్వినియోగాన్ని పరిగణించండి: మీ కస్టమ్ హుక్స్ను పునర్వినియోగం దృష్టిలో ఉంచుకుని డిజైన్ చేయండి. వాటిని బహుళ కాంపోనెంట్లలో ఉపయోగించేంత జెనరిక్గా చేయండి.
- అతి-అబ్స్ట్రాక్షన్ను నివారించండి: ఒక కాంపోనెంట్లో సులభంగా నిర్వహించగలిగే సాధారణ లాజిక్ కోసం కస్టమ్ హుక్స్ను సృష్టించవద్దు. నిజంగా పునర్వినియోగపరచదగిన మరియు సంక్లిష్టమైన లాజిక్ను మాత్రమే సంగ్రహించండి.
నివారించాల్సిన సాధారణ ఆపదలు
- హుక్స్ నియమాలను ఉల్లంఘించడం: ఎల్లప్పుడూ మీ కస్టమ్ హుక్ ఫంక్షన్ యొక్క టాప్ లెవెల్లో హుక్స్ను కాల్ చేయండి మరియు వాటిని రియాక్ట్ ఫంక్షన్ కాంపోనెంట్లు లేదా ఇతర కస్టమ్ హుక్స్ నుండి మాత్రమే కాల్ చేయండి.
- useEffectలో డిపెండెన్సీలను విస్మరించడం: స్టెల్ క్లోజర్లను మరియు ఊహించని ప్రవర్తనను నివారించడానికి
useEffect
హుక్ యొక్క డిపెండెన్సీ అర్రేలో అవసరమైన అన్ని డిపెండెన్సీలను చేర్చాలని నిర్ధారించుకోండి. - అనంతమైన లూప్లను సృష్టించడం:
useEffect
హుక్లో స్టేట్ను అప్డేట్ చేసేటప్పుడు జాగ్రత్తగా ఉండండి, ఎందుకంటే ఇది సులభంగా అనంతమైన లూప్లకు దారితీయవచ్చు. అప్డేట్ షరతులతో కూడుకున్నదని మరియు డిపెండెన్సీలలోని మార్పులపై ఆధారపడి ఉందని నిర్ధారించుకోండి. - క్లీనప్ను మర్చిపోవడం: ఈవెంట్ లిజనర్లను తీసివేయడానికి, సబ్స్క్రిప్షన్లను రద్దు చేయడానికి మరియు మెమరీ లీక్లను నివారించడానికి ఇతర క్లీనప్ పనులను చేయడానికి
useEffect
లో ఎల్లప్పుడూ ఒక క్లీనప్ ఫంక్షన్ను చేర్చండి.
అధునాతన నమూనాలు
కస్టమ్ హుక్స్ కంపోజ్ చేయడం
మరింత సంక్లిష్టమైన లాజిక్ను సృష్టించడానికి కస్టమ్ హుక్స్ను కలిపి కంపోజ్ చేయవచ్చు. ఉదాహరణకు, మీరు ఫెచ్ చేసిన డేటాను లోకల్ స్టోరేజ్కు ఆటోమేటిక్గా పర్సిస్ట్ చేయడానికి useLocalStorage
హుక్ను useFetch
హుక్తో కలపవచ్చు.
హుక్స్ మధ్య లాజిక్ను పంచుకోవడం
బహుళ కస్టమ్ హుక్స్ సాధారణ లాజిక్ను పంచుకుంటే, మీరు ఆ లాజిక్ను ఒక ప్రత్యేక యుటిలిటీ ఫంక్షన్గా సంగ్రహించి రెండు హుక్స్లో తిరిగి ఉపయోగించవచ్చు.
కస్టమ్ హుక్స్తో కాంటెక్స్ట్ను ఉపయోగించడం
గ్లోబల్ స్టేట్ను యాక్సెస్ చేయడానికి మరియు అప్డేట్ చేయడానికి కస్టమ్ హుక్స్ను రియాక్ట్ కాంటెక్స్ట్తో కలిపి ఉపయోగించవచ్చు. ఇది అప్లికేషన్ యొక్క గ్లోబల్ స్టేట్కు అవగాహన ఉన్న మరియు దానితో ఇంటరాక్ట్ చేయగల పునర్వినియోగ కాంపోనెంట్లను సృష్టించడానికి మిమ్మల్ని అనుమతిస్తుంది.
వాస్తవ-ప్రపంచ ఉదాహరణలు
వాస్తవ-ప్రపంచ అప్లికేషన్లలో కస్టమ్ హుక్స్ను ఎలా ఉపయోగించవచ్చో ఇక్కడ కొన్ని ఉదాహరణలు ఉన్నాయి:
- ఫారం ధ్రువీకరణ: ఫారం స్టేట్, ధ్రువీకరణ మరియు సమర్పణను నిర్వహించడానికి
useForm
హుక్ను సృష్టించండి. - ప్రామాణీకరణ: వినియోగదారు ప్రామాణీకరణ మరియు అధికార నిర్వహణ కోసం
useAuth
హుక్ను అమలు చేయండి. - థీమ్ నిర్వహణ: విభిన్న థీమ్ల (లైట్, డార్క్, మొదలైనవి) మధ్య మారడానికి
useTheme
హుక్ను అభివృద్ధి చేయండి. - జియోలొకేషన్: వినియోగదారు యొక్క ప్రస్తుత స్థానాన్ని ట్రాక్ చేయడానికి
useGeolocation
హుక్ను నిర్మించండి. - స్క్రోల్ డిటెక్షన్: వినియోగదారు పేజీలో ఒక నిర్దిష్ట పాయింట్కు స్క్రోల్ చేసినప్పుడు గుర్తించడానికి
useScroll
హుక్ను సృష్టించండి.
ఉదాహరణ : మ్యాపింగ్ లేదా డెలివరీ సేవల వంటి క్రాస్-కల్చరల్ అప్లికేషన్ల కోసం useGeolocation హుక్
import { useState, useEffect } from 'react';
function useGeolocation() {
const [location, setLocation] = useState({
latitude: null,
longitude: null,
error: null,
});
useEffect(() => {
if (!navigator.geolocation) {
setLocation({
latitude: null,
longitude: null,
error: 'Geolocation is not supported by this browser.',
});
return;
}
const watchId = navigator.geolocation.watchPosition(
(position) => {
setLocation({
latitude: position.coords.latitude,
longitude: position.coords.longitude,
error: null,
});
},
(error) => {
setLocation({
latitude: null,
longitude: null,
error: error.message,
});
}
);
return () => navigator.geolocation.clearWatch(watchId);
}, []);
return location;
}
export default useGeolocation;
ముగింపు
కస్టమ్ హుక్స్ శుభ్రమైన, మరింత పునర్వినియోగపరచదగిన మరియు మరింత నిర్వహించగలిగే రియాక్ట్ కోడ్ను వ్రాయడానికి ఒక శక్తివంతమైన సాధనం. కస్టమ్ హుక్స్లో సంక్లిష్టమైన లాజిక్ను సంగ్రహించడం ద్వారా, మీరు మీ కాంపోనెంట్లను సరళీకృతం చేయవచ్చు, కోడ్ డూప్లికేషన్ను తగ్గించవచ్చు మరియు మీ అప్లికేషన్ల మొత్తం నిర్మాణాన్ని మెరుగుపరచవచ్చు. కస్టమ్ హుక్స్ను స్వీకరించండి మరియు మరింత దృఢమైన మరియు స్కేలబుల్ రియాక్ట్ అప్లికేషన్లను నిర్మించడానికి వాటి సామర్థ్యాన్ని అన్లాక్ చేయండి.
మీ ప్రస్తుత కోడ్బేస్లో బహుళ కాంపోనెంట్లలో లాజిక్ పునరావృతమయ్యే ప్రాంతాలను గుర్తించడం ద్వారా ప్రారంభించండి. తర్వాత, ఆ లాజిక్ను కస్టమ్ హుక్స్గా రీఫ్యాక్టర్ చేయండి. కాలక్రమేణా, మీరు పునర్వినియోగ హుక్స్ యొక్క లైబ్రరీని నిర్మిస్తారు, ఇది మీ డెవలప్మెంట్ ప్రక్రియను వేగవంతం చేస్తుంది మరియు మీ కోడ్ నాణ్యతను మెరుగుపరుస్తుంది.
ఉత్తమ పద్ధతులను అనుసరించడం, సాధారణ ఆపదలను నివారించడం మరియు కస్టమ్ హుక్స్ నుండి అత్యధిక ప్రయోజనాలను పొందడానికి అధునాతన నమూనాలను అన్వేషించడం గుర్తుంచుకోండి. అభ్యాసం మరియు అనుభవంతో, మీరు కస్టమ్ హుక్స్ యొక్క మాస్టర్ మరియు మరింత ప్రభావవంతమైన రియాక్ట్ డెవలపర్ అవుతారు.