React-இன் கன்கரென்ட் மோட் மற்றும் பிழை கையாளுதல் உத்திகளை ஆராய்ந்து, வலுவான மற்றும் பயனர் நட்புடன் கூடிய செயலிகளை உருவாக்கவும். பிழைகளை நேர்த்தியாக நிர்வகிப்பதற்கும், தடையற்ற பயனர் அனுபவத்தை உறுதி செய்வதற்கும் நடைமுறை நுட்பங்களைக் கற்றுக்கொள்ளுங்கள்.
React கன்கரென்ட் பிழை கையாளுதல்: மீள்திறன் கொண்ட பயனர் இடைமுகங்களை உருவாக்குதல்
React-இன் கன்கரென்ட் மோட், பதிலளிக்கக்கூடிய மற்றும் ஊடாடும் பயனர் இடைமுகங்களை உருவாக்குவதற்கான புதிய சாத்தியங்களைத் திறக்கிறது. இருப்பினும், பெரும் சக்தியுடன் பெரும் பொறுப்பும் வருகிறது. கன்கரென்ட் மோட்டின் அடிப்படைகளான ஒத்திசைவற்ற செயல்பாடுகள் மற்றும் தரவுப் பெறுதல் ஆகியவை, பயனர் அனுபவத்தைக் குலைக்கக்கூடிய சாத்தியமான தோல்விப் புள்ளிகளை அறிமுகப்படுத்துகின்றன. இந்தக் கட்டுரை, React-இன் கன்கரென்ட் சூழலில் வலுவான பிழை கையாளுதல் உத்திகளை ஆராய்கிறது, எதிர்பாராத சிக்கல்கள் ஏற்பட்டாலும் உங்கள் செயலிகள் மீள்திறன் கொண்டதாகவும், பயனர் நட்புடன் இருப்பதை உறுதி செய்கிறது.
கன்கரென்ட் மோட் மற்றும் பிழை கையாளுதலில் அதன் தாக்கம் ஆகியவற்றைப் புரிந்துகொள்ளுதல்
பாரம்பரிய React செயலிகள் ஒத்திசைவாக (synchronously) இயங்குகின்றன, அதாவது ஒவ்வொரு புதுப்பித்தலும் முடியும் வரை பிரதான திரெட்டை (main thread) தடுக்கிறது. மறுபுறம், கன்கரென்ட் மோட், பயனர் தொடர்புகளுக்கு முன்னுரிமை அளிக்கவும், பதிலளிக்கும் தன்மையைப் பராமரிக்கவும் புதுப்பிப்புகளை இடைநிறுத்த, தற்காலிகமாக நிறுத்த அல்லது கைவிட React-ஐ அனுமதிக்கிறது. இது டைம் ஸ்லைசிங் (time slicing) மற்றும் சஸ்பென்ஸ் (Suspense) போன்ற நுட்பங்கள் மூலம் அடையப்படுகிறது.
இருப்பினும், இந்த ஒத்திசைவற்ற தன்மை புதிய பிழைச் சூழல்களை அறிமுகப்படுத்துகிறது. காம்போனென்ட்கள் இன்னும் பெறப்படாத தரவை ரெண்டர் செய்ய முயற்சிக்கலாம் அல்லது ஒத்திசைவற்ற செயல்பாடுகள் எதிர்பாராதவிதமாக தோல்வியடையலாம். சரியான பிழை கையாளுதல் இல்லாமல், இந்தச் சிக்கல்கள் உடைந்த பயனர் இடைமுகங்களுக்கும், வெறுப்பூட்டும் பயனர் அனுபவத்திற்கும் வழிவகுக்கும்.
React காம்போனென்ட்களில் பாரம்பரிய Try/Catch பிளாக்குகளின் வரம்புகள்
ஜாவாஸ்கிரிப்டில் பிழை கையாளுதலுக்கு try/catch
பிளாக்குகள் அடிப்படையானவை என்றாலும், React காம்போனென்ட்களுக்குள், குறிப்பாக ரெண்டரிங் சூழலில், அவற்றுக்கு வரம்புகள் உள்ளன. ஒரு காம்போனென்ட்டின் render()
மெத்தடிற்குள் நேரடியாக வைக்கப்படும் ஒரு try/catch
பிளாக், ரெண்டரிங்கின் போது ஏற்படும் பிழைகளைப் பிடிக்காது. ஏனென்றால், React-இன் ரெண்டரிங் செயல்முறை try/catch
பிளாக்கின் இயக்கச் சூழலுக்கு வெளியே நிகழ்கிறது.
இந்த உதாரணத்தைக் கவனியுங்கள் (இது எதிர்பார்த்தபடி வேலை செய்யாது):
function MyComponent() {
try {
// This will throw an error if `data` is undefined or null
const value = data.property;
return {value};
} catch (error) {
console.error("Error during rendering:", error);
return Error occurred!;
}
}
இந்தக் காம்போனென்ட் ரெண்டர் செய்யப்படும்போது `data` வரையறுக்கப்படவில்லை என்றால், `data.property` அணுகல் ஒரு பிழையை ஏற்படுத்தும். இருப்பினும், try/catch
பிளாக் இந்தப் பிழையைப் பிடிக்காது. இந்தப் பிழை React காம்போனென்ட் மரத்தில் மேல்நோக்கிப் பரவி, முழு செயலியையும் செயலிழக்கச் செய்யக்கூடும்.
எர்ரர் பவுண்டரிகளை அறிமுகப்படுத்துதல்: React-இன் உள்ளமைக்கப்பட்ட பிழை கையாளும் பொறிமுறை
React, அதன் குழந்தை காம்போனென்ட்களின் ரெண்டரிங், வாழ்க்கைச் சுழற்சி முறைகள் மற்றும் கன்ஸ்ட்ரக்டர்களின் போது ஏற்படும் பிழைகளைக் கையாள பிரத்யேகமாக வடிவமைக்கப்பட்ட எர்ரர் பவுண்டரி (Error Boundary) என்ற ஒரு சிறப்பு காம்போனென்ட்டை வழங்குகிறது. எர்ரர் பவுண்டரிகள் ஒரு பாதுகாப்பு வலையாக செயல்படுகின்றன, பிழைகள் முழு செயலியையும் செயலிழக்கச் செய்வதைத் தடுத்து, ஒரு நேர்த்தியான மாற்று UI-ஐ வழங்குகின்றன.
எர்ரர் பவுண்டரிகள் எப்படி வேலை செய்கின்றன
எர்ரர் பவுண்டரிகள் என்பது இந்த வாழ்க்கைச் சுழற்சி முறைகளில் ஏதேனும் ஒன்றை (அல்லது இரண்டையும்) செயல்படுத்தும் React கிளாஸ் காம்போனென்ட்கள் ஆகும்:
static getDerivedStateFromError(error)
: இந்த வாழ்க்கைச் சுழற்சி முறை, ஒரு துணை காம்போனென்ட் மூலம் பிழை ஏற்பட்ட பிறகு அழைக்கப்படுகிறது. இது பிழையை ஒரு வாதமாகப் பெற்று, ஒரு பிழை ஏற்பட்டுள்ளது என்பதைக் குறிக்க ஸ்டேட்டைப் புதுப்பிக்க உங்களை அனுமதிக்கிறது.componentDidCatch(error, info)
: இந்த வாழ்க்கைச் சுழற்சி முறை, ஒரு துணை காம்போனென்ட் மூலம் பிழை ஏற்பட்ட பிறகு அழைக்கப்படுகிறது. இது பிழையையும், பிழை ஏற்பட்ட காம்போனென்ட் ஸ்டாக் பற்றிய தகவல்களைக் கொண்ட `info` ஆப்ஜெக்ட்டையும் பெறுகிறது. இந்த முறை பிழைகளைப் பதிவு செய்வதற்கோ அல்லது பிழை கண்காணிப்பு சேவைக்கு (எ.கா., Sentry, Rollbar, அல்லது Bugsnag) பிழையைப் புகாரளிப்பது போன்ற பக்க விளைவுகளைச் செய்வதற்கோ சிறந்தது.
ஒரு எளிய எர்ரர் பவுண்டரியை உருவாக்குதல்
இங்கே ஒரு எர்ரர் பவுண்டரி காம்போனென்ட்டின் அடிப்படை உதாரணம்:
class ErrorBoundary extends React.Component {
constructor(props) {
super(props);
this.state = { hasError: false };
}
static getDerivedStateFromError(error) {
// Update state so the next render will show the fallback UI.
return { hasError: true };
}
componentDidCatch(error, info) {
// Example "componentStack":
// in ComponentThatThrows (created by App)
// in MyErrorBoundary (created by App)
// in div (created by App)
// in App
console.error("ErrorBoundary caught an error:", error, info.componentStack);
// You can also log the error to an error reporting service
// logErrorToMyService(error, info.componentStack);
}
render() {
if (this.state.hasError) {
// You can render any custom fallback UI
return Something went wrong.
;
}
return this.props.children;
}
}
எர்ரர் பவுண்டரியைப் பயன்படுத்துதல்
எர்ரர் பவுண்டரியைப் பயன்படுத்த, பிழையை ஏற்படுத்தக்கூடிய எந்தவொரு காம்போனென்ட்டையும் சுற்றி அதைப் பயன்படுத்தவும்:
function MyComponentThatMightError() {
// This component might throw an error during rendering
if (Math.random() < 0.5) {
throw new Error("Component failed!");
}
return Everything is fine!;
}
function App() {
return (
);
}
MyComponentThatMightError
ஒரு பிழையை ஏற்படுத்தினால், எர்ரர் பவுண்டரி அதைப் பிடித்து, அதன் ஸ்டேட்டைப் புதுப்பித்து, மாற்று UI-ஐ ("Something went wrong.") ரெண்டர் செய்யும். செயலியின் மற்ற பகுதிகள் சாதாரணமாக செயல்படும்.
எர்ரர் பவுண்டரிகளுக்கான முக்கியக் கருத்தாய்வுகள்
- நுணுக்கம்: எர்ரர் பவுண்டரிகளை உத்தி ரீதியாக வைக்கவும். முழு செயலியையும் ஒரே எர்ரர் பவுண்டரியில் வைப்பது கவர்ச்சிகரமானதாகத் தோன்றலாம், ஆனால் பிழைகளைத் தனிமைப்படுத்தவும், மேலும் குறிப்பிட்ட மாற்று UI-களை வழங்கவும் பல எர்ரர் பவுண்டரிகளைப் பயன்படுத்துவது பெரும்பாலும் சிறந்தது. உதாரணமாக, பயனர் சுயவிவரப் பகுதி அல்லது தரவு காட்சிப்படுத்தல் காம்போனென்ட் போன்ற உங்கள் செயலியின் வெவ்வேறு பிரிவுகளுக்கு தனித்தனி எர்ரர் பவுண்டரிகளை நீங்கள் கொண்டிருக்கலாம்.
- பிழைப் பதிவு: தொலைநிலை சேவைக்கு பிழைகளைப் பதிவு செய்ய
componentDidCatch
-ஐ செயல்படுத்தவும். இது தயாரிப்பில் பிழைகளைக் கண்காணிக்கவும், உங்கள் செயலியில் கவனம் தேவைப்படும் பகுதிகளை அடையாளம் காணவும் உங்களை அனுமதிக்கிறது. Sentry, Rollbar, மற்றும் Bugsnag போன்ற சேவைகள் பிழை கண்காணிப்பு மற்றும் அறிக்கையிடலுக்கான கருவிகளை வழங்குகின்றன. - மாற்று UI: தகவல் தரும் மற்றும் பயனர் நட்புடன் கூடிய மாற்று UI-களை வடிவமைக்கவும். ஒரு பொதுவான பிழைச் செய்தியைக் காண்பிப்பதற்குப் பதிலாக, பயனருக்குச் சூழலையும் வழிகாட்டுதலையும் வழங்கவும். உதாரணமாக, பக்கத்தைப் புதுப்பிக்க, ஆதரவைத் தொடர்பு கொள்ள அல்லது வேறு செயலை முயற்சிக்க நீங்கள் பரிந்துரைக்கலாம்.
- பிழை மீட்பு: பிழை மீட்பு வழிமுறைகளைச் செயல்படுத்துவதைக் கருத்தில் கொள்ளுங்கள். உதாரணமாக, தோல்வியுற்ற செயல்பாட்டை மீண்டும் முயற்சிக்க பயனரை அனுமதிக்கும் ஒரு பட்டனை நீங்கள் வழங்கலாம். இருப்பினும், மீண்டும் முயற்சிக்கும் தர்க்கம் பொருத்தமான பாதுகாப்புகளை உள்ளடக்கியிருப்பதை உறுதி செய்வதன் மூலம் முடிவற்ற சுழற்சிகளைத் தவிர்க்க கவனமாக இருங்கள்.
- எர்ரர் பவுண்டரிகள் தங்களுக்குக் *கீழே* உள்ள காம்போனென்ட்களில் ஏற்படும் பிழைகளை மட்டுமே பிடிக்கின்றன. ஒரு எர்ரர் பவுண்டரி தனக்குள் ஏற்படும் பிழைகளைப் பிடிக்க முடியாது. ஒரு எர்ரர் பவுண்டரி பிழைச் செய்தியை ரெண்டர் செய்ய முயற்சிக்கும்போது தோல்வியுற்றால், அந்தப் பிழை அதற்கு மேலே உள்ள நெருங்கிய எர்ரர் பவுண்டரிக்குப் பரவும்.
சஸ்பென்ஸ் மற்றும் எர்ரர் பவுண்டரிகளுடன் ஒத்திசைவற்ற செயல்பாடுகளின் போது ஏற்படும் பிழைகளைக் கையாளுதல்
React-இன் சஸ்பென்ஸ் (Suspense) காம்போனென்ட், தரவுப் பெறுதல் போன்ற ஒத்திசைவற்ற செயல்பாடுகளைக் கையாள ஒரு அறிவிப்பு வழியை வழங்குகிறது. ஒரு காம்போனென்ட் தரவுக்காகக் காத்திருப்பதால் "சஸ்பெண்ட்" (ரெண்டரிங்கை இடைநிறுத்தும்போது) ஆகும்போது, சஸ்பென்ஸ் ஒரு மாற்று UI-ஐக் காட்டுகிறது. இந்த ஒத்திசைவற்ற செயல்பாடுகளின் போது ஏற்படும் பிழைகளைக் கையாள சஸ்பென்ஸுடன் எர்ரர் பவுண்டரிகளை இணைக்கலாம்.
தரவுப் பெறுதலுக்கு சஸ்பென்ஸைப் பயன்படுத்துதல்
சஸ்பென்ஸைப் பயன்படுத்த, அதை ஆதரிக்கும் ஒரு தரவுப் பெறும் லைப்ரரி உங்களுக்குத் தேவை. `react-query`, `swr` போன்ற லைப்ரரிகள் மற்றும் சஸ்பென்ஸுடன் இணக்கமான இடைமுகத்துடன் `fetch`-ஐ இணைக்கும் சில தனிப்பயன் தீர்வுகள் இதை அடைய முடியும்.
ஒரு பிராமிஸைத் திருப்பித் தரும் மற்றும் சஸ்பென்ஸுடன் இணக்கமான ஒரு கற்பனையான `fetchData` செயல்பாட்டைப் பயன்படுத்தி எளிமைப்படுத்தப்பட்ட உதாரணம் இங்கே:
import React, { Suspense } from 'react';
// Hypothetical fetchData function that supports Suspense
const fetchData = (url) => {
// ... (Implementation that throws a Promise when data is not yet available)
};
const Resource = {
data: fetchData('/api/data')
};
function MyComponent() {
const data = Resource.data.read(); // Throws a Promise if data is not ready
return {data.value};
}
function App() {
return (
Loading...
இந்த உதாரணத்தில்:
fetchData
என்பது ஒரு API எண்ட்பாயிண்டிலிருந்து தரவைப் பெறும் ஒரு செயல்பாடு. தரவு இன்னும் கிடைக்காதபோது ஒரு பிராமிஸை வீசும் வகையில் இது வடிவமைக்கப்பட்டுள்ளது. சஸ்பென்ஸ் சரியாக வேலை செய்வதற்கு இது முக்கியம்.Resource.data.read()
தரவைப் படிக்க முயற்சிக்கிறது. தரவு இன்னும் கிடைக்கவில்லை என்றால் (பிராமிஸ் இன்னும் தீர்க்கப்படவில்லை), அது பிராமிஸை வீசுகிறது, இதனால் காம்போனென்ட் சஸ்பெண்ட் ஆகிறது.Suspense
தரவு பெறப்படும்போதுfallback
UI-ஐ (Loading...) காட்டுகிறது.ErrorBoundary
,MyComponent
-ஐ ரெண்டர் செய்யும்போது அல்லது தரவுப் பெறும் செயல்பாட்டின் போது ஏற்படும் எந்தப் பிழைகளையும் பிடிக்கிறது. API அழைப்பு தோல்வியுற்றால், எர்ரர் பவுண்டரி பிழையைப் பிடித்து அதன் மாற்று UI-ஐக் காண்பிக்கும்.
எர்ரர் பவுண்டரிகளுடன் சஸ்பென்ஸிற்குள் உள்ள பிழைகளைக் கையாளுதல்
சஸ்பென்ஸுடன் வலுவான பிழை கையாளுதலுக்கான திறவுகோல், Suspense
காம்போனென்ட்டை ஒரு ErrorBoundary
-உடன் இணைப்பதாகும். இது Suspense
எல்லைக்குள் தரவுப் பெறுதல் அல்லது காம்போனென்ட் ரெண்டரிங்கின் போது ஏற்படும் எந்தப் பிழைகளும் பிடிக்கப்பட்டு, நேர்த்தியாகக் கையாளப்படுவதை உறுதி செய்கிறது.
fetchData
செயல்பாடு தோல்வியுற்றால் அல்லது MyComponent
ஒரு பிழையை ஏற்படுத்தினால், எர்ரர் பவுண்டரி பிழையைப் பிடித்து அதன் மாற்று UI-ஐக் காண்பிக்கும். இது முழு செயலியும் செயலிழப்பதைத் தடுத்து, மேலும் பயனர் நட்புடன் கூடிய அனுபவத்தை வழங்குகிறது.
வெவ்வேறு கன்கரென்ட் மோட் சூழல்களுக்கான குறிப்பிட்ட பிழை கையாளுதல் உத்திகள்
பொதுவான கன்கரென்ட் மோட் சூழல்களுக்கான சில குறிப்பிட்ட பிழை கையாளுதல் உத்திகள் இங்கே:
1. React.lazy காம்போனென்ட்களில் பிழைகளைக் கையாளுதல்
React.lazy
உங்கள் செயலியின் ஆரம்ப பண்டில் அளவைக் குறைத்து, காம்போனென்ட்களை டைனமிக்காக இறக்குமதி செய்ய உங்களை அனுமதிக்கிறது. இருப்பினும், டைனமிக் இறக்குமதி செயல்பாடு தோல்வியடையக்கூடும், உதாரணமாக, நெட்வொர்க் கிடைக்கவில்லை என்றால் அல்லது சர்வர் செயலிழந்து இருந்தால்.
React.lazy
-ஐப் பயன்படுத்தும்போது பிழைகளைக் கையாள, லேசி-லோடட் காம்போனென்ட்டை ஒரு Suspense
காம்போனென்ட் மற்றும் ஒரு ErrorBoundary
-உடன் இணைக்கவும்:
import React, { Suspense, lazy } from 'react';
const MyLazyComponent = lazy(() => import('./MyComponent'));
function App() {
return (
Loading component...