What is JSX?
- JSX stands for JavaScript XML, it allows us to write HTML in React.
- JSX makes it easier to write and add HTML in React
- JSX allows us to write HTML elements in JavaScript and place them in the DOM without any createElement() and/or appendChild() methods.
- JSX is an extension of the JavaScript language based on ES6 and is translated into regular JavaScript at runtime.
- You are not required to use JSX
Example of using and not using JSX:
1 2 3 4 5 6 7 8 9 10 | <span class="token comment">// Có JSX</span> <span class="token comment">// index.js</span> <span class="token keyword">import</span> React <span class="token keyword">from</span> <span class="token string">'react'</span> <span class="token punctuation">;</span> <span class="token keyword">import</span> ReactDOM <span class="token keyword">from</span> <span class="token string">'react-dom/client'</span> <span class="token punctuation">;</span> <span class="token keyword">const</span> myelement <span class="token operator">=</span> <span class="token operator"><</span> p <span class="token operator">></span> Đẹp trai là một tội ác thì toàn bộ zai bách khoa phải đi tù <span class="token operator">!</span> <span class="token operator"><</span> <span class="token operator">/</span> p <span class="token operator">></span> <span class="token punctuation">;</span> ReactDOM <span class="token punctuation">.</span> <span class="token function">render</span> <span class="token punctuation">(</span> myelement <span class="token punctuation">,</span> document <span class="token punctuation">.</span> <span class="token function">getElementById</span> <span class="token punctuation">(</span> <span class="token string">'root'</span> <span class="token punctuation">)</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> |
1 2 3 4 5 6 7 8 9 10 | <span class="token comment">// Không có JSX</span> <span class="token comment">// index.js</span> <span class="token keyword">import</span> React <span class="token keyword">from</span> <span class="token string">'react'</span> <span class="token punctuation">;</span> <span class="token keyword">import</span> ReactDOM <span class="token keyword">from</span> <span class="token string">'react-dom/client'</span> <span class="token punctuation">;</span> <span class="token keyword">const</span> myelement <span class="token operator">=</span> React <span class="token punctuation">.</span> <span class="token function">createElement</span> <span class="token punctuation">(</span> <span class="token string">'p'</span> <span class="token punctuation">,</span> <span class="token punctuation">{</span> <span class="token punctuation">}</span> <span class="token punctuation">,</span> <span class="token string">'Đẹp trai là một tội ác thì toàn bộ zai bách khoa phải đi tù!'</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> ReactDOM <span class="token punctuation">.</span> <span class="token function">render</span> <span class="token punctuation">(</span> myelement <span class="token punctuation">,</span> document <span class="token punctuation">.</span> <span class="token function">getElementById</span> <span class="token punctuation">(</span> <span class="token string">'root'</span> <span class="token punctuation">)</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> |
- Let’s compare the two code snippets, it’s easy to see that the code using JSX is simpler and easier to understand.
Some conventions in JSX
- Naming in JSX
- tag name is always lowercase
- React component names must be capitalized
- use className and htmlFor instead of class and for
- Attributes in tags must be written in camelCase (e.g. onClick, className, …)
- With JSX, you can write expressions inside curly braces {}
1 2 3 4 5 | <span class="token keyword">const</span> apple <span class="token operator">=</span> <span class="token number">30</span> <span class="token punctuation">;</span> <span class="token keyword">const</span> myelement <span class="token operator">=</span> <span class="token operator"><</span> h1 <span class="token operator">></span> <span class="token constant">C</span> ó <span class="token punctuation">{</span> apple <span class="token punctuation">}</span> quả táo <span class="token operator"><</span> <span class="token operator">/</span> h1 <span class="token operator">></span> <span class="token keyword">const</span> myelement <span class="token operator">=</span> <span class="token operator"><</span> h1 <span class="token operator">></span> <span class="token constant">C</span> ó <span class="token punctuation">{</span> <span class="token number">30</span> <span class="token operator">+</span> <span class="token number">10</span> <span class="token punctuation">}</span> quả táo <span class="token operator"><</span> <span class="token operator">/</span> h1 <span class="token operator">></span> |
- To write HTML on multiple lines , enclose the HTML inside parentheses and always have a parent tag surround it all.
1 2 3 4 5 6 7 | <span class="token keyword">const</span> myelement <span class="token operator">=</span> <span class="token punctuation">(</span> <span class="token operator"><</span> div <span class="token operator">></span> <span class="token operator"><</span> p <span class="token operator">></span> Đoạn văn thứ nhất <span class="token operator"><</span> <span class="token operator">/</span> p <span class="token operator">></span> <span class="token operator"><</span> p <span class="token operator">></span> Đoạn văn thứ hai <span class="token operator"><</span> <span class="token operator">/</span> p <span class="token operator">></span> <span class="token operator"><</span> <span class="token operator">/</span> div <span class="token operator">></span> <span class="token punctuation">)</span> |
- But if you just want to have 2 p tags without a surrounding div tag, you can do it like this.
1 2 3 4 5 6 7 | <span class="token keyword">const</span> myelement <span class="token operator">=</span> <span class="token punctuation">(</span> <span class="token operator"><</span> <span class="token operator">></span> <span class="token operator"><</span> p <span class="token operator">></span> Đoạn văn thứ nhất <span class="token operator"><</span> <span class="token operator">/</span> p <span class="token operator">></span> <span class="token operator"><</span> p <span class="token operator">></span> Đoạn văn thứ hai <span class="token operator"><</span> <span class="token operator">/</span> p <span class="token operator">></span> <span class="token operator"><</span> <span class="token operator">/</span> <span class="token operator">></span> <span class="token punctuation">)</span> |
- Or
1 2 3 4 5 6 7 | <span class="token keyword">const</span> myelement <span class="token operator">=</span> <span class="token punctuation">(</span> <span class="token operator"><</span> fragment <span class="token operator">></span> <span class="token operator"><</span> p <span class="token operator">></span> Đoạn văn thứ nhất <span class="token operator"><</span> <span class="token operator">/</span> p <span class="token operator">></span> <span class="token operator"><</span> p <span class="token operator">></span> Đoạn văn thứ hai <span class="token operator"><</span> <span class="token operator">/</span> p <span class="token operator">></span> <span class="token operator"><</span> <span class="token operator">/</span> fragment <span class="token operator">></span> <span class="token punctuation">)</span> |
- Add class for tags in JSX.
1 2 | <span class="token keyword">const</span> myelement <span class="token operator">=</span> <span class="token operator"><</span> p className <span class="token operator">=</span> <span class="token string">"par1"</span> <span class="token operator">></span> Đoạn văn thứ nhất <span class="token operator"><</span> <span class="token operator">/</span> p <span class="token operator">></span> |
- Add attributes for tags in JSX like in html.
1 2 | <span class="token keyword">const</span> myelement <span class="token operator">=</span> <span class="token operator"><</span> input type <span class="token operator">=</span> <span class="token string">"text"</span> value <span class="token operator">=</span> <span class="token string">""</span> size <span class="token operator">=</span> <span class="token string">"10"</span> <span class="token operator">/</span> <span class="token operator">></span> |
- Add events for tags in JSX like in html.
1 2 | <span class="token keyword">const</span> myelement <span class="token operator">=</span> <span class="token operator"><</span> button onClick <span class="token operator">=</span> <span class="token punctuation">{</span> functionHandle <span class="token punctuation">}</span> <span class="token operator">></span> Click here <span class="token operator">!</span> <span class="token operator"><</span> <span class="token operator">/</span> button <span class="token operator">></span> |
Above is what I understand about JSX, if you have any comments, questions or additions, please comment to let me know!
Thanks for reading this far!!!