தமிழ்

ரியாக்ட் போர்ட்டல்களுக்கான ஒரு விரிவான வழிகாட்டி. இது அவற்றின் பயன்பாடுகள், செயல்படுத்தல், மற்றும் சிறந்த நடைமுறைகளை விளக்குகிறது.

ரியாக்ட் போர்ட்டல்கள்: காம்போனென்ட் மரத்திற்கு வெளியே உள்ளடக்கத்தை ரெண்டரிங் செய்தல்

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

ரியாக்ட் போர்ட்டல்கள் என்றால் என்ன?

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

உங்கள் பயன்பாட்டின் மேல் மட்டத்தில் காட்டப்பட வேண்டிய ஒரு மோடல் காம்போனென்ட் உங்களிடம் இருப்பதாக கற்பனை செய்து பாருங்கள், அது காம்போனென்ட் மரத்தில் எங்கு ரெண்டரிங் செய்யப்பட்டிருந்தாலும் சரி. போர்ட்டல்கள் இல்லாமல், நீங்கள் இதை absolute positioning மற்றும் z-index ஆகியவற்றைப் பயன்படுத்தி அடைய முயற்சி செய்யலாம், இது சிக்கலான ஸ்டைலிங் சிக்கல்களுக்கும் சாத்தியமான முரண்பாடுகளுக்கும் வழிவகுக்கும். போர்ட்டல்கள் மூலம், மோடலின் உள்ளடக்கத்தை ஒரு குறிப்பிட்ட DOM நோடிற்கு, அதாவது ஒரு பிரத்யேக "modal-root" உறுப்புக்கு நேரடியாக ரெண்டரிங் செய்யலாம், இது எப்போதும் சரியான மட்டத்தில் ரெண்டரிங் செய்யப்படுவதை உறுதி செய்கிறது.

ரியாக்ட் போர்ட்டல்களை ஏன் பயன்படுத்த வேண்டும்?

ரியாக்ட் போர்ட்டல்கள் வலை மேம்பாட்டில் உள்ள பல பொதுவான சவால்களை நிவர்த்தி செய்கின்றன:

ரியாக்ட் போர்ட்டல்களை செயல்படுத்துவது எப்படி

ரியாக்ட் போர்ட்டல்களைப் பயன்படுத்துவது நேரடியானது. இதோ ஒரு படிப்படியான வழிகாட்டி:

  1. ஒரு DOM நோடை உருவாக்கவும்: முதலில், நீங்கள் போர்ட்டல் உள்ளடக்கத்தை ரெண்டரிங் செய்ய விரும்பும் ஒரு DOM நோடை உருவாக்கவும். இது பொதுவாக உங்கள் `index.html` கோப்பில் செய்யப்படுகிறது. எடுத்துக்காட்டாக:
    <div id="modal-root"></div>
  2. `ReactDOM.createPortal()` ஐப் பயன்படுத்தவும்: உங்கள் ரியாக்ட் காம்போனென்டில், உருவாக்கப்பட்ட DOM நோடில் உள்ளடக்கத்தை ரெண்டரிங் செய்ய `ReactDOM.createPortal()` முறையைப் பயன்படுத்தவும். இந்த முறை இரண்டு வாதங்களை எடுக்கிறது: ரியாக்ட் நோட் (நீங்கள் ரெண்டரிங் செய்ய விரும்பும் உள்ளடக்கம்) மற்றும் நீங்கள் அதை ரெண்டரிங் செய்ய விரும்பும் DOM நோட்.
    import ReactDOM from 'react-dom';
    
    function MyComponent() {
      return ReactDOM.createPortal(
        <div>இந்த உள்ளடக்கம் modal-root-இல் ரெண்டரிங் செய்யப்படுகிறது!</div>,
        document.getElementById('modal-root')
      );
    }
    
    export default MyComponent;
  3. காம்போனென்ட்டை ரெண்டர் செய்யவும்: போர்ட்டலைக் கொண்டிருக்கும் காம்போனென்ட்டை மற்ற எந்த ரியாக்ட் காம்போனென்ட்டையும் போலவே ரெண்டர் செய்யவும்.
    function App() {
      return (
        <div>
          <h1>எனது ஆப்</h1>
          <MyComponent />
        </div>
      );
    }
    
    export default App;

இந்த எடுத்துக்காட்டில், `MyComponent`-க்குள் உள்ள உள்ளடக்கம் `modal-root` உறுப்புக்குள் ரெண்டரிங் செய்யப்படும், `MyComponent` ஆனது `App` காம்போனென்டுக்குள் ரெண்டரிங் செய்யப்பட்டிருந்தாலும் கூட.

எடுத்துக்காட்டு: ரியாக்ட் போர்ட்டல்களைப் பயன்படுத்தி ஒரு மோடல் காம்போனென்ட்டை உருவாக்குதல்

ரியாக்ட் போர்ட்டல்களைப் பயன்படுத்தி ஒரு முழுமையான மோடல் காம்போனென்ட்டை உருவாக்குவோம். இந்த எடுத்துக்காட்டில் மோடலைத் திறக்கவும் மூடவும் அடிப்படை ஸ்டைலிங் மற்றும் செயல்பாடுகள் அடங்கும்.

import React, { useState } from 'react';
import ReactDOM from 'react-dom';

const modalRoot = document.getElementById('modal-root');

function Modal({ children, onClose }) {
  const [isOpen, setIsOpen] = useState(true);

  const handleClose = () => {
    setIsOpen(false);
    onClose();
  };

  if (!isOpen) return null;

  return ReactDOM.createPortal(
    <div className="modal-overlay">
      <div className="modal">
        <div className="modal-content">
          {children}
        </div>
        <button onClick={handleClose}>மூடு</button>
      </div>
    </div>,
    modalRoot
  );
}

function App() {
  const [showModal, setShowModal] = useState(false);

  const handleOpenModal = () => {
    setShowModal(true);
  };

  const handleCloseModal = () => {
    setShowModal(false);
  };

  return (
    <div>
      <h1>எனது ஆப்</h1>
      <button onClick={handleOpenModal}>மோடலைத் திற</button>
      {showModal && (
        <Modal onClose={handleCloseModal}>
          <h2>மோடல் உள்ளடக்கம்</h2>
          <p>இது மோடலின் உள்ளடக்கம்.</p>
        </Modal>
      )}
    </div>
  );
}

export default App;

இந்த எடுத்துக்காட்டில்:

மோடலை திரையில் சரியாக நிலைநிறுத்த, `modal-overlay` மற்றும் `modal` வகுப்புகளுக்கு நீங்கள் சில CSS ஸ்டைலிங்கையும் சேர்க்க வேண்டும். எடுத்துக்காட்டாக:

.modal-overlay {
  position: fixed;
  top: 0;
  left: 0;
  width: 100%;
  height: 100%;
  background-color: rgba(0, 0, 0, 0.5);
  display: flex;
  justify-content: center;
  align-items: center;
  z-index: 1000;
}

.modal {
  background-color: white;
  padding: 20px;
  border-radius: 5px;
}

.modal-content {
  margin-bottom: 10px;
}

போர்ட்டல்களுடன் நிகழ்வுகளைக் கையாளுதல்

போர்ட்டல்களைப் பயன்படுத்தும் போது ஒரு முக்கியமான கருத்தில் கொள்ள வேண்டிய விஷயம், நிகழ்வுகள் எவ்வாறு கையாளப்படுகின்றன என்பதுதான். நிகழ்வு குமிழ்தல் (Event bubbling) போர்ட்டல்களுடன் நிலையான ரியாக்ட் காம்போனென்ட்களை விட வித்தியாசமாக செயல்படுகிறது.

ஒரு போர்ட்டலுக்குள் ஒரு நிகழ்வு ஏற்படும் போது, அது வழக்கம் போல் DOM மரம் வழியாக மேலே குமிழ்தேறும். இருப்பினும், ரியாக்ட் நிகழ்வு அமைப்பு போர்ட்டலை ஒரு வழக்கமான ரியாக்ட் நோடாகக் கருதுகிறது, அதாவது நிகழ்வுகள் போர்ட்டலைக் கொண்டிருக்கும் ரியாக்ட் காம்போனென்ட் மரம் வழியாகவும் மேலே குமிழ்தேறும்.

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

இந்த சிக்கல்களைத் தவிர்க்க, நிகழ்வு மேலும் மேலே குமிழ்தேறுவதைத் தடுக்க நிகழ்வு பொருளில் `stopPropagation()` முறையைப் பயன்படுத்தலாம். மாற்றாக, நிகழ்வு கையாளுபவர்கள் எப்போது தூண்டப்பட வேண்டும் என்பதைக் கட்டுப்படுத்த ரியாக்ட்டின் செயற்கை நிகழ்வுகள் மற்றும் நிபந்தனை ரெண்டரிங்கைப் பயன்படுத்தலாம்.

ஒரு நிகழ்வு பெற்றோர் காம்போனென்டிற்கு குமிழ்தேறுவதைத் தடுக்க `stopPropagation()` ஐப் பயன்படுத்துவதற்கான எடுத்துக்காட்டு இங்கே:

function MyComponent() {
  const handleClick = (event) => {
    event.stopPropagation();
    console.log('போர்ட்டலுக்குள் கிளிக் செய்யப்பட்டது!');
  };

  return ReactDOM.createPortal(
    <div onClick={handleClick}>இந்த உள்ளடக்கம் போர்ட்டலில் ரெண்டரிங் செய்யப்படுகிறது.</div>,
    document.getElementById('portal-root')
  );
}

இந்த எடுத்துக்காட்டில், போர்ட்டலுக்குள் உள்ளடக்கத்தைக் கிளிக் செய்வது `handleClick` செயல்பாட்டைத் தூண்டும், ஆனால் நிகழ்வு எந்த பெற்றோர் காம்போனென்ட்களுக்கும் குமிழ்தேறாது.

ரியாக்ட் போர்ட்டல்களைப் பயன்படுத்துவதற்கான சிறந்த நடைமுறைகள்

ரியாக்ட் போர்ட்டல்களுடன் பணிபுரியும்போது நினைவில் கொள்ள வேண்டிய சில சிறந்த நடைமுறைகள் இங்கே:

ரியாக்ட் போர்ட்டல்களுக்கான மாற்று வழிகள்

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

The choice of which approach to use depends on the specific requirements of your application and the complexity of the UI elements you're trying to create. Portals are generally the best option when you need precise control over the positioning and stacking order of elements and want to avoid CSS conflicts.

உலகளாவிய பரிசீலனைகள்

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

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

முடிவுரை

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

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

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