purity

அறியப்பட்ட impure functions-ஐ அவை அழைக்கவில்லை என்பதைச் சரிபார்த்து, components/hooks pure ஆக உள்ளனவா என்பதை validate செய்கிறது.

விதி விவரங்கள்

React components pure functions ஆக இருக்க வேண்டும். அதே props கொடுக்கப்பட்டால், அவை எப்போதும் அதே JSX-ஐ return செய்ய வேண்டும். Components render நடக்கும் போது Math.random() அல்லது Date.now() போன்ற functions-ஐப் பயன்படுத்தினால், ஒவ்வொரு முறையும் வேறு output உருவாகும். இது React-இன் கருதுகோள்களை உடைத்து, hydration mismatches, தவறான memoization, மற்றும் கணிக்க முடியாத நடத்தை போன்ற bugs ஏற்படுத்தும்.

பொதுவான மீறல்கள்

பொதுவாக, அதே inputs-க்கு வேறு value return செய்யும் எந்த API-யும் இந்த விதியை மீறுகிறது. வழக்கமான உதாரணங்கள்:

  • Math.random()
  • Date.now() / new Date()
  • crypto.randomUUID()
  • performance.now()

செல்லாதது

இந்த விதிக்கான தவறான code உதாரணங்கள்:

// ❌ Math.random() in render
function Component() {
const id = Math.random(); // Different every render
return <div key={id}>Content</div>;
}

// ❌ Date.now() for values
function Component() {
const timestamp = Date.now(); // Changes every render
return <div>Created at: {timestamp}</div>;
}

செல்லுபடியாகும்

இந்த விதிக்கான சரியான code உதாரணங்கள்:

// ✅ Stable IDs from initial state
function Component() {
const [id] = useState(() => crypto.randomUUID());
return <div key={id}>Content</div>;
}

Troubleshooting

தற்போதைய நேரத்தை காட்ட வேண்டும்

Render நடக்கும் போது Date.now() அழைப்பது உங்கள் component-ஐ impure ஆக்கும்:

// ❌ Wrong: Time changes every render
function Clock() {
return <div>Current time: {Date.now()}</div>;
}

அதற்கு பதிலாக, impure function-ஐ render-க்கு வெளியே நகர்த்துங்கள்:

function Clock() {
const [time, setTime] = useState(() => Date.now());

useEffect(() => {
const interval = setInterval(() => {
setTime(Date.now());
}, 1000);

return () => clearInterval(interval);
}, []);

return <div>Current time: {time}</div>;
}