தமிழ்

React-ன் useTransition ஹூக் மூலம் லோடிங் நிலைகளை நிர்வகித்து, UI புதுப்பிப்புகளுக்கு முன்னுரிமை அளித்து, உலகளாவிய பயனர்களுக்கு மென்மையான மற்றும் பதிலளிக்கக்கூடிய செயலிகளை உருவாக்குங்கள்.

React useTransition Hook: ஒருங்கு நேரத்தில் ரெண்டரிங் மூலம் பயனர் அனுபவத்தை உயர்த்துதல்

வலை மேம்பாட்டின் எப்போதும் மாறிவரும் சூழலில், தடையற்ற மற்றும் பதிலளிக்கக்கூடிய பயனர் அனுபவங்களை உருவாக்குவது மிக முக்கியம். பயனர் இடைமுகங்களை உருவாக்குவதற்கான ஒரு முன்னணி ஜாவாஸ்கிரிப்ட் நூலகமான ரியாக்ட், டெவலப்பர்கள் இந்த இலக்கை அடைய உதவும் அம்சங்களை தொடர்ந்து அறிமுகப்படுத்துகிறது. இவற்றில், useTransition ஹூக் லோடிங் நிலைகளை நிர்வகிப்பதற்கும் UI புதுப்பிப்புகளுக்கு முன்னுரிமை அளிப்பதற்கும் ஒரு சக்திவாய்ந்த கருவியாக விளங்குகிறது, இதன் விளைவாக உலகெங்கிலும் உள்ள பயனர்களுக்கு மென்மையான மற்றும் மகிழ்ச்சிகரமான தொடர்புகளை வழங்குகிறது.

பிரச்சனையைப் புரிந்துகொள்ளுதல்: UI புதுப்பிப்புகளைத் தடுத்தல்

useTransition பற்றி ஆராய்வதற்கு முன், அது தீர்க்கும் பிரச்சனையைப் புரிந்துகொள்வது அவசியம். பாரம்பரிய ரியாக்ட் ரெண்டரிங்கில், புதுப்பிப்புகள் ஒத்திசைவாக (synchronous) இருக்கும். அதாவது, ஒரு காம்போனென்ட்டின் நிலை மாறும்போது, ரியாக்ட் உடனடியாக ரெண்டரிங் செயல்முறையைத் தொடங்குகிறது, இது முக்கிய த்ரெட்டை (main thread) தடுத்து, குறிப்பிடத்தக்க தாமதங்களுக்கு வழிவகுக்கும், குறிப்பாக சிக்கலான காம்போனென்ட்கள் அல்லது கணக்கீட்டு ரீதியாக தீவிரமான செயல்பாடுகளைக் கையாளும்போது. பயனர்கள் அனுபவிக்கக்கூடியவை:

இந்த சிக்கல்கள் மெதுவான இணைய இணைப்புகள் அல்லது குறைந்த சக்தி வாய்ந்த சாதனங்களைக் கொண்ட பயனர்களுக்கு குறிப்பாக சிக்கலாக இருக்கின்றன, இது அவர்களின் ஒட்டுமொத்த அனுபவத்தை எதிர்மறையாக பாதிக்கிறது. வரையறுக்கப்பட்ட அலைவரிசையுள்ள ஒரு பகுதியில் உள்ள ஒரு பயனர், தரவு நிறைந்த ஒரு செயலியைப் பயன்படுத்த முயற்சிப்பதை கற்பனை செய்து பாருங்கள் – ஒத்திசைவான புதுப்பிப்புகளால் ஏற்படும் தாமதங்கள் நம்பமுடியாத அளவிற்கு வெறுப்பூட்டும்.

useTransition அறிமுகம்: ஒருங்கு நேர ரெண்டரிங்கிற்கான ஒரு தீர்வு

ரியாக்ட் 18-ல் அறிமுகப்படுத்தப்பட்ட useTransition ஹூக், ஒருங்கு நேர ரெண்டரிங்கை (concurrent rendering) இயக்குவதன் மூலம் இந்த பிரச்சனைகளுக்கு ஒரு தீர்வை வழங்குகிறது. ஒருங்கு நேர ரெண்டரிங், ரெண்டரிங் பணிகளை குறுக்கிட, இடைநிறுத்த, மீண்டும் தொடங்க அல்லது கைவிட ரியாக்ட்டை அனுமதிக்கிறது, இதன் மூலம் சில புதுப்பிப்புகளுக்கு மற்றவற்றை விட முன்னுரிமை அளிக்க முடிகிறது. இதன் பொருள், பின்னணியில் நீண்ட நேரம் இயங்கும் செயல்பாடுகளைச் செய்யும் போதும் ரியாக்ட் UI-ஐ பதிலளிக்கக்கூடியதாக வைத்திருக்க முடியும்.

useTransition எப்படி வேலை செய்கிறது

useTransition ஹூக் இரண்டு மதிப்புகளைக் கொண்ட ஒரு வரிசையை (array) வழங்குகிறது:

  1. isPending: ஒரு டிரான்சிஷன் செயலில் உள்ளதா என்பதைக் குறிக்கும் ஒரு பூலியன் (boolean) மதிப்பு.
  2. startTransition: நீங்கள் ஒரு டிரான்சிஷனாகக் குறிக்க விரும்பும் நிலை புதுப்பிப்பை உள்ளடக்கும் ஒரு செயல்பாடு (function).

நீங்கள் startTransition-ஐ அழைக்கும்போது, ரியாக்ட் அதனுள் இருக்கும் நிலை புதுப்பிப்பை அவசரமற்றது எனக் குறிக்கிறது. இது முக்கிய த்ரெட் குறைவாக பிஸியாக இருக்கும் வரை புதுப்பிப்பை ஒத்திவைக்க ரியாக்ட்டை அனுமதிக்கிறது, பயனர் தொடர்புகள் போன்ற அவசரமான புதுப்பிப்புகளுக்கு முன்னுரிமை அளிக்கிறது. டிரான்சிஷன் நிலுவையில் இருக்கும்போது, isPending true ஆக இருக்கும், இது பயனருக்கு ஒரு லோடிங் காட்டி அல்லது பிற காட்சி பின்னூட்டத்தைக் காட்ட உங்களை அனுமதிக்கிறது.

நடைமுறை உதாரணங்கள்: useTransition மூலம் பயனர் அனுபவத்தை மேம்படுத்துதல்

ரியாக்ட் செயலிகளில் பயனர் அனுபவத்தை மேம்படுத்த useTransition எவ்வாறு பயன்படுத்தப்படலாம் என்பதற்கான சில நடைமுறை உதாரணங்களை ஆராய்வோம்.

உதாரணம் 1: தேடல் செயல்பாட்டை மேம்படுத்துதல்

பயனர் தட்டச்சு செய்யும் போது ஒரு பெரிய தரவுத்தொகுப்பை வடிகட்டும் ஒரு தேடல் செயல்பாட்டை கருத்தில் கொள்ளுங்கள். useTransition இல்லாமல், ஒவ்வொரு கீஸ்ட்ரோக்கும் ஒரு மறு-ரெண்டரைத் தூண்டக்கூடும், இது ஒரு மந்தமான அனுபவத்திற்கு வழிவகுக்கும். useTransition மூலம், உள்ளீட்டு புலத்தைப் புதுப்பிப்பதற்கு முன்னுரிமை அளித்து, வடிகட்டுதல் செயல்பாட்டை ஒத்திவைக்கலாம்.


import React, { useState, useTransition } from 'react';

function SearchComponent({ 
  data //assume this is a large data set
}) {
  const [query, setQuery] = useState('');
  const [results, setResults] = useState(data); //initial data set as result
  const [isPending, startTransition] = useTransition();

  const handleChange = (e) => {
    const inputValue = e.target.value;
    setQuery(inputValue); // Update the input field immediately

    startTransition(() => {
      // Filter the data in a transition
      const filteredResults = data.filter((item) =>
        item.name.toLowerCase().includes(inputValue.toLowerCase())
      );
      setResults(filteredResults);
    });
  };

  return (
    <div>
      <input type="text" value={query} onChange={handleChange} placeholder="Search..." />
      {isPending && <p>Searching...</p>}
      <ul>
        {results.map((item) => (
          <li key={item.id}>{item.name}</li>
        ))}
      </ul>
    </div>
  );
}

export default SearchComponent;

இந்த எடுத்துக்காட்டில், handleChange செயல்பாடு query நிலையை உடனடியாகப் புதுப்பிக்கிறது, உள்ளீட்டு புலம் பதிலளிக்கக்கூடியதாக இருப்பதை உறுதி செய்கிறது. கணக்கீட்டு ரீதியாக செலவாகும் வடிகட்டுதல் செயல்பாடு, startTransition-ல் உள்ளடக்கப்பட்டுள்ளது. வடிகட்டுதல் செயல்பாட்டில் இருக்கும்போது, isPending நிலை true ஆக இருக்கும், இது பயனருக்கு "தேடுகிறது..." என்ற செய்தியைக் காட்ட அனுமதிக்கிறது. இது காட்சி பின்னூட்டத்தை வழங்குகிறது மற்றும் பயனர் தாமதத்தை பதிலளிக்காத தன்மையாக உணர்வதைத் தடுக்கிறது.

உதாரணம் 2: வழிசெலுத்தல் டிரான்சிஷன்களை மேம்படுத்துதல்

வழிசெலுத்தல் டிரான்சிஷன்களும் useTransition-ல் இருந்து பயனடையலாம். சிக்கலான செயலிகளில், குறிப்பாக வழித்தடங்களுக்கு இடையில் செல்லும்போது, காம்போனென்ட்கள் ஏற்றப்பட்டு தரவு எடுக்கப்படும்போது தாமதம் ஏற்படலாம். useTransition-ஐப் பயன்படுத்தி, URL-ஐப் புதுப்பிப்பதற்கு முன்னுரிமை அளித்து, புதிய பக்க உள்ளடக்கத்தின் ரெண்டரிங்கை ஒத்திவைக்கலாம்.


import React, { useState, useTransition } from 'react';
import { useNavigate } from 'react-router-dom';

function NavigationComponent() {
  const navigate = useNavigate();
  const [isPending, startTransition] = useTransition();

  const handleNavigation = (route) => {
    startTransition(() => {
      navigate(route);
    });
  };

  return (
    <nav>
      <button onClick={() => handleNavigation('/home')}>Home</button>
      <button onClick={() => handleNavigation('/about')}>About</button>
      <button onClick={() => handleNavigation('/products')}>Products</button>
      {isPending && <p>Loading...</p>}
    </nav>
  );
}

export default NavigationComponent;

இந்த எடுத்துக்காட்டில், handleNavigation செயல்பாடு navigate செயல்பாட்டை உள்ளடக்க startTransition-ஐப் பயன்படுத்துகிறது. இது URL-ஐப் புதுப்பிப்பதற்கு முன்னுரிமை அளிக்குமாறு ரியாக்டிற்கு கூறுகிறது, வழிசெலுத்தல் தொடங்கப்பட்டுவிட்டது என்ற உடனடி பின்னூட்டத்தை பயனருக்கு வழங்குகிறது. புதிய பக்க உள்ளடக்கத்தின் ரெண்டரிங், முக்கிய த்ரெட் குறைவாக பிஸியாக இருக்கும் வரை ஒத்திவைக்கப்படுகிறது, இது ஒரு மென்மையான டிரான்சிஷன் அனுபவத்தை உறுதி செய்கிறது. டிரான்சிஷன் நிலுவையில் இருக்கும்போது, பயனருக்கு "ஏற்றுகிறது..." என்ற செய்தியைக் காட்டலாம்.

உதாரணம் 3: மேலும் ஏற்றுதல் செயல்பாட்டுடன் பட கேலரி

"மேலும் ஏற்று" பொத்தானைப் பயன்படுத்தி படங்களை தொகுதிகளாக ஏற்றும் ஒரு பட கேலரியைக் கவனியுங்கள். ஒரு புதிய தொகுதி படங்களை ஏற்றும்போது, படங்கள் பெறப்பட்டு ரெண்டர் செய்யப்படும்போது UI-ஐ பதிலளிக்கக்கூடியதாக வைத்திருக்க useTransition-ஐப் பயன்படுத்தலாம்.


import React, { useState, useTransition, useCallback } from 'react';

function ImageGallery() {
  const [images, setImages] = useState([]);
  const [isLoading, setIsLoading] = useState(false);
  const [isPending, startTransition] = useTransition();
  const [page, setPage] = useState(1);

  const loadMoreImages = useCallback(async () => {
      setIsLoading(true);
      startTransition(async () => {
        // Simulate fetching images from an API (replace with your actual API call)
        await new Promise(resolve => setTimeout(resolve, 500));

        const newImages = Array.from({ length: 10 }, (_, i) => ({
          id: images.length + i + 1,
          src: `https://via.placeholder.com/150/${Math.floor(Math.random() * 16777215).toString(16)}` // Random placeholder image
        }));

        setImages(prevImages => [...prevImages, ...newImages]);
        setPage(prevPage => prevPage + 1);

      });
      setIsLoading(false);
  }, [images.length]);

  return (
    <div>
      <div style={{ display: 'flex', flexWrap: 'wrap' }}>
        {images.map(image => (
          <img key={image.id} src={image.src} alt={`Image ${image.id}`} style={{ margin: '5px' }} />
        ))}
      </div>
      {isLoading ? (
        <p>Loading more images...</p>
      ) : (
        <button onClick={loadMoreImages} disabled={isPending}>
          {isPending ? 'Loading...' : 'Load More'}
        </button>
      )}
    </div>
  );
}

export default ImageGallery;

இந்த எடுத்துக்காட்டில், "மேலும் ஏற்று" பொத்தானைக் கிளிக் செய்வது loadMoreImages செயல்பாட்டைத் தூண்டுகிறது. இந்தச் செயல்பாட்டிற்குள், புதிய படங்களை கேலரியில் சேர்க்கும் நிலை புதுப்பிப்பை startTransition-ஐப் பயன்படுத்தி உள்ளடக்கிறோம். படங்கள் ஏற்றப்பட்டு ரெண்டர் செய்யப்படும்போது, isPending true ஆக அமைக்கப்படுகிறது, பொத்தான் முடக்கப்பட்டு, பல கிளிக்குகளைத் தடுக்கிறது, மேலும் உரை "ஏற்றுகிறது..." என்று மாறுகிறது. ஏற்றுதல் முடிந்ததும், படங்கள் ரெண்டர் செய்யப்பட்டு, isPending மீண்டும் false ஆகிறது. இது மேலும் படங்கள் ஏற்றப்படுகின்றன என்பதற்கான காட்சி அறிகுறியை வழங்குகிறது மற்றும் பயனர் பொத்தானை இருமுறை கிளிக் செய்வதைத் தடுக்கிறது, இது எதிர்பாராத நடத்தைக்கு காரணமாக இருக்கலாம்.

useTransition-ஐப் பயன்படுத்துவதற்கான சிறந்த நடைமுறைகள்

useTransition ஹூக்கை திறம்பட பயன்படுத்த, பின்வரும் சிறந்த நடைமுறைகளைக் கவனியுங்கள்:

உலகளாவிய பரிசீலனைகள்: பன்முக பார்வையாளர்களுக்காக UX-ஐ வடிவமைத்தல்

உலகளாவிய பார்வையாளர்களுக்காக வலைச் செயலிகளை உருவாக்கும்போது, வெவ்வேறு பிராந்தியங்கள் மற்றும் கலாச்சாரங்களைச் சேர்ந்த பயனர்களின் பன்முகத் தேவைகளையும் எதிர்பார்ப்புகளையும் கருத்தில் கொள்வது முக்கியம். useTransition-ஐப் பயன்படுத்துவதற்கும் பயனர் அனுபவத்தை மேம்படுத்துவதற்கும் சில உலகளாவிய பரிசீலனைகள் இங்கே:

useTransition-க்கு அப்பால்: மேலும் மேம்படுத்தல்கள்

useTransition ஒரு மதிப்புமிக்க கருவியாக இருந்தாலும், அது புதிரின் ஒரு பகுதி மட்டுமே. பயனர் அனுபவத்தை உண்மையாக மேம்படுத்த, பின்வரும் கூடுதல் உத்திகளைக் கவனியுங்கள்:

முடிவுரை: ஒரு சிறந்த எதிர்காலத்திற்காக ஒருங்கு நேர ரெண்டரிங்கை ஏற்றுக்கொள்வது

useTransition ஹூக் ரியாக்ட் மேம்பாட்டில் ஒரு குறிப்பிடத்தக்க முன்னேற்றத்தைக் குறிக்கிறது, இது டெவலப்பர்களுக்கு அதிக பதிலளிக்கக்கூடிய மற்றும் ஈர்க்கக்கூடிய பயனர் அனுபவங்களை உருவாக்க அதிகாரம் அளிக்கிறது. ஒருங்கு நேர ரெண்டரிங்கின் கொள்கைகளைப் புரிந்துகொண்டு சிறந்த நடைமுறைகளைப் பயன்படுத்துவதன் மூலம், உங்கள் செயலிகளை மேம்படுத்தவும் உலகெங்கிலும் உள்ள பயனர்களுக்கு தடையற்ற அனுபவத்தை வழங்கவும் useTransition-ஐப் பயன்படுத்தலாம். உண்மையான உள்ளடக்கிய மற்றும் அணுகக்கூடிய வலைச் செயலிகளை உருவாக்க நெட்வொர்க் நிலைமைகள், சாதனத் திறன்கள் மற்றும் கலாச்சார உணர்திறன் போன்ற உலகளாவிய காரணிகளைக் கருத்தில் கொள்ள நினைவில் கொள்ளுங்கள்.

ரியாக்ட் தொடர்ந்து வளர்ச்சியடைந்து வருவதால், useTransition போன்ற புதிய அம்சங்களை ஏற்றுக்கொள்வது, காலத்திற்கு ஏற்ப முன்னேறிச் செல்வதற்கும், பன்முகப்பட்ட மற்றும் உலகளாவிய பார்வையாளர்களின் கோரிக்கைகளைப் பூர்த்தி செய்யும் விதிவிலக்கான பயனர் அனுபவங்களை வழங்குவதற்கும் முக்கியமானது. செயல்திறன், அணுகல்தன்மை மற்றும் கலாச்சார உணர்திறன் ஆகியவற்றிற்கு முன்னுரிமை அளிப்பதன் மூலம், செயல்பாட்டு ரீதியாக மட்டுமல்லாமல், அனைவருக்கும் பயன்படுத்த மகிழ்ச்சியாக இருக்கும் வலைச் செயலிகளை நீங்கள் உருவாக்கலாம்.