JSX உடன் markup எழுதுதல்
JSX என்பது JavaScript file உள்ளே HTML போல இருக்கும் markup எழுத அனுமதிக்கும் JavaScript-க்கான syntax extension. Components எழுத வேறு வழிகளும் இருந்தாலும், பெரும்பாலான React developers JSX-ன் conciseness-ஐ விரும்புகிறார்கள்; பெரும்பாலான codebases அதைப் பயன்படுத்துகின்றன.
நீங்கள் கற்றுக்கொள்ள போவது
- React ஏன் markup-ஐ rendering logic உடன் mix செய்கிறது
- JSX, HTML-இலிருந்து எப்படி வேறுபடுகிறது
- JSX மூலம் தகவலை எப்படி display செய்வது
JSX: Markup-ஐ JavaScript-க்குள் வைப்பது
Web, HTML, CSS, மற்றும் JavaScript மேல் build செய்யப்பட்டுள்ளது. பல ஆண்டுகளாக, web developers content-ஐ HTML-இல், design-ஐ CSS-இல், logic-ஐ JavaScript-இல் வைத்தனர் - பெரும்பாலும் தனித்தனி files-இல்! Page-ன் logic JavaScript-இல் தனியாக இருந்தபோது, content HTML உள்ளே marked up செய்யப்பட்டது:


HTML


JavaScript
ஆனால் Web மேலும் interactive ஆனபோது, content-ஐ logic அதிகமாக determine செய்தது. HTML-ன் பொறுப்பை JavaScript எடுத்துக்கொண்டது! இதனால் தான் React-இல், rendering logic மற்றும் markup ஒரே இடமான components-இல் சேர்ந்து வாழ்கின்றன.


Sidebar.js React component


Form.js React component
Button-ன் rendering logic மற்றும் markup ஒன்றாக இருப்பதால், ஒவ்வொரு edit-இலும் அவை ஒன்றுடன் ஒன்று sync-இல் இருக்கும். மாறாக, button-ன் markup மற்றும் sidebar-ன் markup போன்ற தொடர்பில்லாத details ஒன்றிலிருந்து ஒன்று isolated ஆக இருக்கும்; இதனால் அவற்றை தனித்தனியாக மாற்றுவது safer.
ஒவ்வொரு React component-மும் browser-இல் React render செய்யும் சில markup கொண்டிருக்கக்கூடிய JavaScript function. அந்த markup-ஐ represent செய்ய React components JSX என்ற syntax extension பயன்படுத்துகின்றன. JSX HTML போலவே தெரியும்; ஆனால் அது சிறிது strict, மேலும் dynamic information display செய்ய முடியும். இதைப் புரிந்துகொள்ள சிறந்த வழி, சில HTML markup-ஐ JSX markup-ஆக convert செய்வது.
HTML-ஐ JSX-ஆக convert செய்தல்
உங்களிடம் சில (முழுமையாக valid) HTML உள்ளது என்று வைத்துக்கொள்ளுங்கள்:
<h1>Hedy Lamarr-ன் Todos</h1>
<img
src="https://react.dev/images/docs/scientists/yXOvdOSs.jpg"
alt="Hedy Lamarr"
class="photo"
>
<ul>
<li>புதிய traffic lights கண்டுபிடி
<li>ஒரு movie scene rehearse செய்
<li>Spectrum technology-ஐ மேம்படுத்து
</ul>அதை உங்கள் component-க்குள் வைக்க விரும்புகிறீர்கள்:
export default function TodoList() {
return (
// ???
)
}அப்படியே copy paste செய்தால், அது வேலை செய்யாது:
export default function TodoList() { return ( // This doesn't quite work! <h1>Hedy Lamarr-ன் Todos</h1> <img src="https://react.dev/images/docs/scientists/yXOvdOSs.jpg" alt="Hedy Lamarr" class="photo" > <ul> <li>புதிய traffic lights கண்டுபிடி <li>ஒரு movie scene rehearse செய் <li>Spectrum technology-ஐ மேம்படுத்து </ul>
இதற்குக் காரணம் JSX, HTML-ஐ விட strict; மேலும் சில கூடுதல் rules கொண்டது! மேலுள்ள error messages படித்தால், markup fix செய்ய அவை உங்களை வழிநடத்தும்; அல்லது கீழுள்ள guide-ஐ பின்பற்றலாம்.
JSX விதிகள்
1. Single root element return செய்யுங்கள்
Component-இலிருந்து multiple elements return செய்ய, அவற்றை single parent tag-இல் wrap செய்யுங்கள்.
உதாரணமாக, <div> பயன்படுத்தலாம்:
<div>
<h1>Hedy Lamarr-ன் Todos</h1>
<img
src="https://react.dev/images/docs/scientists/yXOvdOSs.jpg"
alt="Hedy Lamarr"
class="photo"
>
<ul>
...
</ul>
</div>உங்கள் markup-க்கு கூடுதல் <div> சேர்க்க விரும்பவில்லை என்றால், அதற்கு பதிலாக <> மற்றும் </> எழுதலாம்:
<>
<h1>Hedy Lamarr-ன் Todos</h1>
<img
src="https://react.dev/images/docs/scientists/yXOvdOSs.jpg"
alt="Hedy Lamarr"
class="photo"
>
<ul>
...
</ul>
</>இந்த empty tag Fragment என்று அழைக்கப்படுகிறது. Browser HTML tree-இல் எந்த trace-யும் வைக்காமல் things-ஐ group செய்ய Fragments அனுமதிக்கின்றன.
Deep Dive
JSX HTML போலத் தெரியும்; ஆனால் under the hood அது plain JavaScript objects-ஆக transform செய்யப்படுகிறது. அவற்றை array-க்குள் wrap செய்யாமல் function-இலிருந்து இரண்டு objects return செய்ய முடியாது. அதனால் தான் இரண்டு JSX tags-ஐ மற்றொரு tag அல்லது Fragment-இல் wrap செய்யாமல் return செய்ய முடியாது.
2. எல்லா tags-ஐயும் close செய்யுங்கள்
JSX-இல் tags explicit ஆக closed இருக்க வேண்டும்: <img> போன்ற self-closing tags <img /> ஆக மாற வேண்டும்; <li>oranges போன்ற wrapping tags <li>oranges</li> ஆக எழுதப்பட வேண்டும்.
Hedy Lamarr-ன் image மற்றும் list items closed ஆக இருந்தால் இவ்வாறு தெரியும்:
<>
<img
src="https://react.dev/images/docs/scientists/yXOvdOSs.jpg"
alt="Hedy Lamarr"
class="photo"
/>
<ul>
<li>புதிய traffic lights கண்டுபிடி</li>
<li>ஒரு movie scene rehearse செய்</li>
<li>Spectrum technology-ஐ மேம்படுத்து</li>
</ul>
</>3. பெரும்பாலானவற்றை camelCase செய்யுங்கள்!
JSX JavaScript-ஆக மாறுகிறது; JSX-இல் எழுதப்பட்ட attributes JavaScript objects-ன் keys ஆக மாறுகின்றன. உங்கள் சொந்த components-இல், அந்த attributes-ஐ variables-குள் read செய்ய விரும்புவீர்கள். ஆனால் JavaScript variable names-க்கு limitations உள்ளன. உதாரணமாக, names dashes கொண்டிருக்க முடியாது; class போன்ற reserved words ஆகவும் இருக்க முடியாது.
இதனால் தான் React-இல் பல HTML மற்றும் SVG attributes camelCase-இல் எழுதப்படுகின்றன. உதாரணமாக, stroke-width பதிலாக strokeWidth பயன்படுத்துகிறீர்கள். class reserved word என்பதால், React-இல் அதற்கு பதிலாக corresponding DOM property-ன் பெயரால் className எழுதுகிறீர்கள்:
<img
src="https://react.dev/images/docs/scientists/yXOvdOSs.jpg"
alt="Hedy Lamarr"
className="photo"
/>DOM component props பட்டியலில் இந்த attributes அனைத்தையும் காணலாம். ஒன்றை தவறாக எழுதினால் கவலைப்பட வேண்டாம் - React browser console-இல் possible correction உடன் message print செய்யும்.
Pro-tip: JSX converter பயன்படுத்துங்கள்
Existing markup-இல் இந்த attributes அனைத்தையும் convert செய்வது சலிப்பாக இருக்கலாம்! உங்கள் existing HTML மற்றும் SVG-ஐ JSX-க்கு translate செய்ய converter பயன்படுத்த பரிந்துரைக்கிறோம். Converters நடைமுறையில் மிகவும் பயனுள்ளவை; ஆனால் என்ன நடக்கிறது என்பதைப் புரிந்துகொள்வது இன்னும் மதிப்புள்ளது, அப்போதுதான் நீங்கள் சுலபமாக உங்கள் சொந்தமாக JSX எழுத முடியும்.
இது உங்கள் final result:
export default function TodoList() { return ( <> <h1>Hedy Lamarr-ன் Todos</h1> <img src="https://react.dev/images/docs/scientists/yXOvdOSs.jpg" alt="Hedy Lamarr" className="photo" /> <ul> <li>புதிய traffic lights கண்டுபிடி</li> <li>ஒரு movie scene rehearse செய்</li> <li>Spectrum technology-ஐ மேம்படுத்து</li> </ul> </> ); }
Recap
இப்போது JSX ஏன் உள்ளது, components-இல் அதை எப்படி பயன்படுத்துவது என்பதை நீங்கள் அறிவீர்கள்:
- React components, markup உடன் rendering logic-ஐ group செய்கின்றன, ஏனெனில் அவை தொடர்புடையவை.
- JSX சில differences உடன் HTML-க்கு similar. தேவைப்பட்டால் converter பயன்படுத்தலாம்.
- Error messages பெரும்பாலும் உங்கள் markup fix செய்ய சரியான திசையை காட்டும்.
Challenge 1 of 1: சில HTML-ஐ JSX-ஆக convert செய்யுங்கள்
இந்த HTML ஒரு component-க்குள் paste செய்யப்பட்டது; ஆனால் இது valid JSX அல்ல. இதை fix செய்யுங்கள்:
export default function Bio() { return ( <div class="intro"> <h1>என் website-க்கு வரவேற்கிறேன்!</h1> </div> <p class="summary"> என் சிந்தனைகளை இங்கே காணலாம். <br><br> <b>மேலும் <i>படங்கள்</b></i> scientists-ன்! </p> ); }
கையால் செய்வதா அல்லது converter பயன்படுத்துவதா என்பது உங்கள் விருப்பம்!