മലയാളം

കസ്റ്റം ഹുക്കുകൾ ഉപയോഗിച്ച് നിങ്ങളുടെ റിയാക്ട് ആപ്ലിക്കേഷനുകളിൽ പുനരുപയോഗിക്കാവുന്ന ലോജിക്കിന്റെ ശക്തി പ്രയോജനപ്പെടുത്തുക. വൃത്തിയുള്ളതും എളുപ്പത്തിൽ പരിപാലിക്കാവുന്നതുമായ കോഡിനായി കസ്റ്റം ഹുക്കുകൾ എങ്ങനെ നിർമ്മിക്കാമെന്നും ഉപയോഗിക്കാമെന്നും അറിയുക.

കസ്റ്റം ഹുക്കുകൾ: റിയാക്ടിലെ പുനരുപയോഗിക്കാവുന്ന ലോജിക് പാറ്റേണുകൾ

ഫംഗ്ഷണൽ കമ്പോണന്റുകളിലേക്ക് സ്റ്റേറ്റും ലൈഫ് സൈക്കിൾ ഫീച്ചറുകളും കൊണ്ടുവന്നുകൊണ്ട് റിയാക്ട് ഹുക്കുകൾ നമ്മൾ റിയാക്ട് കമ്പോണന്റുകൾ എഴുതുന്ന രീതിയിൽ ഒരു വിപ്ലവം സൃഷ്ടിച്ചു. അവ നൽകുന്ന നിരവധി ഗുണങ്ങളിൽ, ഒന്നിലധികം കമ്പോണന്റുകളിലുടനീളം ലോജിക് വേർതിരിച്ചെടുക്കുന്നതിനും പുനരുപയോഗിക്കുന്നതിനുമുള്ള ശക്തമായ ഒരു സംവിധാനമായി കസ്റ്റം ഹുക്കുകൾ വേറിട്ടുനിൽക്കുന്നു. ഈ ബ്ലോഗ് പോസ്റ്റ് കസ്റ്റം ഹുക്കുകളുടെ ലോകത്തേക്ക് ആഴത്തിൽ ഇറങ്ങിച്ചെല്ലുകയും അവയുടെ പ്രയോജനങ്ങൾ, നിർമ്മാണം, പ്രായോഗിക ഉദാഹരണങ്ങളോടുകൂടിയ ഉപയോഗം എന്നിവ പര്യവേക്ഷണം ചെയ്യുകയും ചെയ്യും.

എന്താണ് കസ്റ്റം ഹുക്കുകൾ?

ചുരുക്കത്തിൽ, കസ്റ്റം ഹുക്ക് എന്നത് "use" എന്ന വാക്കിൽ തുടങ്ങുന്ന ഒരു ജാവാസ്ക്രിപ്റ്റ് ഫംഗ്‌ഷനാണ്, ഇതിന് മറ്റ് ഹുക്കുകളെ വിളിക്കാൻ കഴിയും. കമ്പോണന്റ് ലോജിക്കുകളെ പുനരുപയോഗിക്കാവുന്ന ഫംഗ്‌ഷനുകളായി വേർതിരിച്ചെടുക്കാൻ അവ നിങ്ങളെ അനുവദിക്കുന്നു. റെൻഡർ പ്രോപ്പുകൾ, ഹയർ-ഓർഡർ കമ്പോണന്റുകൾ, അല്ലെങ്കിൽ മറ്റ് സങ്കീർണ്ണമായ പാറ്റേണുകൾ എന്നിവയെ ആശ്രയിക്കാതെ സ്റ്റേറ്റ്ഫുൾ ലോജിക്, സൈഡ് ഇഫക്റ്റുകൾ, അല്ലെങ്കിൽ മറ്റ് സങ്കീർണ്ണമായ പെരുമാറ്റങ്ങൾ എന്നിവ പങ്കിടാനുള്ള ഒരു ശക്തമായ മാർഗമാണിത്.

കസ്റ്റം ഹുക്കുകളുടെ പ്രധാന സവിശേഷതകൾ:

കസ്റ്റം ഹുക്കുകൾ ഉപയോഗിക്കുന്നതിന്റെ പ്രയോജനങ്ങൾ

കസ്റ്റം ഹുക്കുകൾ റിയാക്ട് വികസനത്തിൽ നിരവധി പ്രധാന നേട്ടങ്ങൾ വാഗ്ദാനം ചെയ്യുന്നു:

നിങ്ങളുടെ ആദ്യത്തെ കസ്റ്റം ഹുക്ക് നിർമ്മിക്കുന്നു

വിൻഡോയുടെ വലുപ്പം ട്രാക്ക് ചെയ്യുന്ന ഒരു ഹുക്ക് എന്ന പ്രായോഗിക ഉദാഹരണത്തിലൂടെ നമുക്ക് ഒരു കസ്റ്റം ഹുക്കിന്റെ നിർമ്മാണം വിശദീകരിക്കാം.

ഉദാഹരണം: 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;

വിശദീകരണം:

  1. ആവശ്യമായ ഹുക്കുകൾ ഇമ്പോർട്ട് ചെയ്യുക: നമ്മൾ റിയാക്റ്റിൽ നിന്ന് useState, useEffect എന്നിവ ഇമ്പോർട്ട് ചെയ്യുന്നു.
  2. ഹുക്ക് നിർവചിക്കുക: പേരിടൽ രീതി അനുസരിച്ച് നമ്മൾ useWindowSize എന്ന പേരിൽ ഒരു ഫംഗ്ഷൻ ഉണ്ടാക്കുന്നു.
  3. സ്റ്റേറ്റ് ആരംഭിക്കുക: വിൻഡോയുടെ പ്രാരംഭ വീതിയും ഉയരവും ഉപയോഗിച്ച് windowSize സ്റ്റേറ്റ് ആരംഭിക്കാൻ നമ്മൾ useState ഉപയോഗിക്കുന്നു.
  4. ഇവന്റ് ലിസണർ സജ്ജീകരിക്കുക: വിൻഡോയിലേക്ക് ഒരു റീസൈസ് ഇവന്റ് ലിസണർ ചേർക്കാൻ നമ്മൾ useEffect ഉപയോഗിക്കുന്നു. വിൻഡോയുടെ വലുപ്പം മാറ്റുമ്പോൾ, handleResize ഫംഗ്ഷൻ windowSize സ്റ്റേറ്റ് അപ്ഡേറ്റ് ചെയ്യുന്നു.
  5. ക്ലീനപ്പ്: കമ്പോണന്റ് അൺമൗണ്ട് ചെയ്യുമ്പോൾ ഇവന്റ് ലിസണർ നീക്കംചെയ്യാൻ useEffect-ൽ നിന്ന് നമ്മൾ ഒരു ക്ലീനപ്പ് ഫംഗ്ഷൻ നൽകുന്നു. ഇത് മെമ്മറി ലീക്കുകൾ തടയുന്നു.
  6. തിരികെ നൽകുന്ന മൂല്യങ്ങൾ: ഹുക്ക് 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;

വിശദീകരണം:

  1. ഹുക്ക് ഇമ്പോർട്ട് ചെയ്യുക: നമ്മൾ useWindowSize എന്ന കസ്റ്റം ഹുക്ക് ഇമ്പോർട്ട് ചെയ്യുന്നു.
  2. ഹുക്ക് വിളിക്കുക: നമ്മൾ കമ്പോണന്റിനുള്ളിൽ useWindowSize ഹുക്ക് വിളിക്കുന്നു.
  3. മൂല്യങ്ങൾ ആക്സസ് ചെയ്യുക: width, height മൂല്യങ്ങൾ ലഭിക്കാൻ നമ്മൾ തിരികെ ലഭിച്ച ഒബ്ജക്റ്റിനെ ഡിസ്ട്രക്ചർ ചെയ്യുന്നു.
  4. മൂല്യങ്ങൾ റെൻഡർ ചെയ്യുക: കമ്പോണന്റിന്റെ യുഐയിൽ നമ്മൾ വീതിയും ഉയരവും റെൻഡർ ചെയ്യുന്നു.

useWindowSize ഉപയോഗിക്കുന്ന ഏത് കമ്പോണന്റും വിൻഡോയുടെ വലുപ്പം മാറുമ്പോൾ സ്വയമേവ അപ്‌ഡേറ്റ് ചെയ്യപ്പെടും.

കൂടുതൽ സങ്കീർണ്ണമായ ഉദാഹരണങ്ങൾ

കസ്റ്റം ഹുക്കുകൾക്കായുള്ള കൂടുതൽ വിപുലമായ ഉപയോഗ സാഹചര്യങ്ങൾ നമുക്ക് പര്യവേക്ഷണം ചെയ്യാം.

ഉദാഹരണം: useLocalStorage

ലോക്കൽ സ്റ്റോറേജിൽ നിന്ന് ഡാറ്റ എളുപ്പത്തിൽ സംഭരിക്കാനും വീണ്ടെടുക്കാനും ഈ ഹുക്ക് നിങ്ങളെ അനുവദിക്കുന്നു.

import { useState, useEffect } from 'react';

function useLocalStorage(key, initialValue) {
  // നമ്മുടെ മൂല്യം സംഭരിക്കാനുള്ള സ്റ്റേറ്റ്
  // useState-ലേക്ക് പ്രാരംഭ മൂല്യം നൽകുക, അതുവഴി ലോജിക് ഒരിക്കൽ മാത്രം പ്രവർത്തിക്കും
  const [storedValue, setStoredValue] = useState(() => {
    try {
      // കീ ഉപയോഗിച്ച് ലോക്കൽ സ്റ്റോറേജിൽ നിന്ന് നേടുക
      const item = window.localStorage.getItem(key);
      // സംഭരിച്ച json പാഴ്‌സ് ചെയ്യുക അല്ലെങ്കിൽ ഒന്നുമില്ലെങ്കിൽ initialValue തിരികെ നൽകുക
      return item ? JSON.parse(item) : initialValue;
    } catch (error) {
      // പിശകുണ്ടെങ്കിൽ initialValue തിരികെ നൽകുക
      console.log(error);
      return initialValue;
    }
  });

  // useState-ന്റെ സെറ്റർ ഫംഗ്ഷന്റെ ഒരു പൊതിഞ്ഞ പതിപ്പ് തിരികെ നൽകുക...
  // ... പുതിയ മൂല്യം localStorage-ലേക്ക് നിലനിർത്തുന്നു.
  const setValue = (value) => {
    try {
      // മൂല്യം ഒരു ഫംഗ്ഷനാകാൻ അനുവദിക്കുക, അതുവഴി നമുക്ക് useState-ന്റെ അതേ API ലഭിക്കും
      const valueToStore = value instanceof Function ? value(storedValue) : value;
      // ലോക്കൽ സ്റ്റോറേജിൽ സംരക്ഷിക്കുക
      window.localStorage.setItem(key, JSON.stringify(valueToStore));
      // സ്റ്റേറ്റ് സംരക്ഷിക്കുക
      setStoredValue(valueToStore);
    } catch (error) {
      // കൂടുതൽ വിപുലമായ ഒരു നിർവ്വഹണം പിശക് സാഹചര്യം കൈകാര്യം ചെയ്യും
      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

ഒരു എപിഐയിൽ നിന്ന് ഡാറ്റ ലഭ്യമാക്കുന്നതിനുള്ള ലോജിക് ഈ ഹുക്ക് ഉൾക്കൊള്ളുന്നു.

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;

കസ്റ്റം ഹുക്കുകൾക്കുള്ള മികച്ച രീതികൾ

നിങ്ങളുടെ കസ്റ്റം ഹുക്കുകൾ ഫലപ്രദവും പരിപാലിക്കാൻ കഴിയുന്നതുമാണെന്ന് ഉറപ്പാക്കാൻ, ഈ മികച്ച രീതികൾ പിന്തുടരുക:

ഒഴിവാക്കേണ്ട സാധാരണ അപകടങ്ങൾ

വിപുലമായ പാറ്റേണുകൾ

കസ്റ്റം ഹുക്കുകൾ സംയോജിപ്പിക്കുന്നു

കൂടുതൽ സങ്കീർണ്ണമായ ലോജിക് സൃഷ്ടിക്കാൻ കസ്റ്റം ഹുക്കുകൾ ഒരുമിച്ച് സംയോജിപ്പിക്കാൻ കഴിയും. ഉദാഹരണത്തിന്, ലഭ്യമാക്കിയ ഡാറ്റ ലോക്കൽ സ്റ്റോറേജിലേക്ക് സ്വയമേവ നിലനിർത്തുന്നതിന് ഒരു useLocalStorage ഹുക്കും useFetch ഹുക്കും സംയോജിപ്പിക്കാൻ നിങ്ങൾക്ക് കഴിയും.

ഹുക്കുകൾക്കിടയിൽ ലോജിക് പങ്കിടൽ

ഒന്നിലധികം കസ്റ്റം ഹുക്കുകൾ പൊതുവായ ലോജിക് പങ്കിടുന്നുവെങ്കിൽ, നിങ്ങൾക്ക് ആ ലോജിക് ഒരു പ്രത്യേക യൂട്ടിലിറ്റി ഫംഗ്ഷനിലേക്ക് വേർതിരിച്ച് രണ്ട് ഹുക്കുകളിലും പുനരുപയോഗിക്കാം.

കസ്റ്റം ഹുക്കുകൾക്കൊപ്പം കോൺടെക്സ്റ്റ് ഉപയോഗിക്കുന്നു

ഗ്ലോബൽ സ്റ്റേറ്റ് ആക്സസ് ചെയ്യാനും അപ്ഡേറ്റ് ചെയ്യാനും റിയാക്ട് കോൺടെക്സ്റ്റിനൊപ്പം കസ്റ്റം ഹുക്കുകൾ ഉപയോഗിക്കാം. ഇത് ആപ്ലിക്കേഷന്റെ ഗ്ലോബൽ സ്റ്റേറ്റിനെക്കുറിച്ച് ബോധവാന്മാരാകാനും അതുമായി സംവദിക്കാനും കഴിയുന്ന പുനരുപയോഗിക്കാവുന്ന കമ്പോണന്റുകൾ സൃഷ്ടിക്കാൻ നിങ്ങളെ അനുവദിക്കുന്നു.

യഥാർത്ഥ ലോക ഉദാഹരണങ്ങൾ

യഥാർത്ഥ ലോക ആപ്ലിക്കേഷനുകളിൽ കസ്റ്റം ഹുക്കുകൾ എങ്ങനെ ഉപയോഗിക്കാം എന്നതിന്റെ ചില ഉദാഹരണങ്ങൾ ഇതാ:

ഉദാഹരണം : മാപ്പിംഗ് അല്ലെങ്കിൽ ഡെലിവറി സേവനങ്ങൾ പോലുള്ള ക്രോസ്-കൾച്ചറൽ ആപ്ലിക്കേഷനുകൾക്കായുള്ള 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;

ഉപസംഹാരം

വൃത്തിയുള്ളതും കൂടുതൽ പുനരുപയോഗിക്കാവുന്നതും കൂടുതൽ പരിപാലിക്കാവുന്നതുമായ റിയാക്ട് കോഡ് എഴുതുന്നതിനുള്ള ഒരു ശക്തമായ ഉപകരണമാണ് കസ്റ്റം ഹുക്കുകൾ. സങ്കീർണ്ണമായ ലോജിക്കുകളെ കസ്റ്റം ഹുക്കുകളിൽ ഉൾക്കൊള്ളിക്കുന്നതിലൂടെ, നിങ്ങൾക്ക് നിങ്ങളുടെ കമ്പോണന്റുകൾ ലളിതമാക്കാനും കോഡ് ആവർത്തനം കുറയ്ക്കാനും നിങ്ങളുടെ ആപ്ലിക്കേഷനുകളുടെ മൊത്തത്തിലുള്ള ഘടന മെച്ചപ്പെടുത്താനും കഴിയും. കസ്റ്റം ഹുക്കുകളെ സ്വീകരിക്കുകയും കൂടുതൽ കരുത്തുറ്റതും വിപുലീകരിക്കാവുന്നതുമായ റിയാക്ട് ആപ്ലിക്കേഷനുകൾ നിർമ്മിക്കാനുള്ള അവയുടെ സാധ്യതകൾ പ്രയോജനപ്പെടുത്തുകയും ചെയ്യുക.

ഒന്നിലധികം കമ്പോണന്റുകളിലുടനീളം ലോജിക് ആവർത്തിക്കുന്ന നിങ്ങളുടെ നിലവിലുള്ള കോഡ്‌ബേസിലെ ഭാഗങ്ങൾ കണ്ടെത്തി ആരംഭിക്കുക. തുടർന്ന്, ആ ലോജിക്കിനെ കസ്റ്റം ഹുക്കുകളിലേക്ക് റീഫാക്ടർ ചെയ്യുക. കാലക്രമേണ, നിങ്ങളുടെ വികസന പ്രക്രിയയെ ത്വരിതപ്പെടുത്തുകയും നിങ്ങളുടെ കോഡിന്റെ ഗുണനിലവാരം മെച്ചപ്പെടുത്തുകയും ചെയ്യുന്ന പുനരുപയോഗിക്കാവുന്ന ഹുക്കുകളുടെ ഒരു ലൈബ്രറി നിങ്ങൾ നിർമ്മിക്കും.

മികച്ച രീതികൾ പിന്തുടരാനും സാധാരണ അപകടങ്ങൾ ഒഴിവാക്കാനും കസ്റ്റം ഹുക്കുകളിൽ നിന്ന് പരമാവധി പ്രയോജനപ്പെടുത്തുന്നതിന് വിപുലമായ പാറ്റേണുകൾ പര്യവേക്ഷണം ചെയ്യാനും ഓർക്കുക. പരിശീലനത്തിലൂടെയും അനുഭവത്തിലൂടെയും, നിങ്ങൾ കസ്റ്റം ഹുക്കുകളുടെ ഒരു വിദഗ്ദ്ധനും കൂടുതൽ ഫലപ്രദമായ ഒരു റിയാക്ട് ഡെവലപ്പറും ആയിത്തീരും.