What is JSX?
JSX is syntactic sugar to React.createElement(component, props, ...children) function. In short it basically allows you to write HTML in react code.
Why JSX?
React embraces the fact that rendering logic is inherently coupled with other UI logic like handling events, how data is prepared for display e.t.c.. so instead of separating markup and logic into different files. It is easier to have it along side your ReactJS code. Also, it's type-safe which helps you to catch most of the errors during compilation.
JSX and it's React code:
JSX
const element = ( <h1 className="greeting"> Hello, React! </h1> );
Above JSX will get compiled to the following code without JSX:
var element = React.createElement( "h1", { className: "greeting" }, "Hello, React!" );
*Babel is the javascript compiler used to convert the above JSX code to React.createElement code.
→ As seen above, after compilation JSX expressions become regular javascript function calls which will then be evaluated to javascript objects in the browser so similar to the functions JSX can be assigned to variables, accepted as arguments, used inside control statements and return it from functions.
→ JSX syntax is similar to XML. JSX tags contain tag name, attributes and children. Attribute values can be a string between ' ' or javascript expressions wrapped in curly braces {} can be used.
Rules:
- One top level element must wrap the HTML code if not exceptions like "Adjacent JSX elements must be wrapped in an enclosing tag" will occur.
- JSX considers components with small letters a html tags(h1, p, div...) and tries to render them directly instead of creating a React object using React.createElement() so user components must be declared with capital letters and used when needed.
One more example with children components:
JSX
function hello() { return <div> <ul className="numbers"> <li>one</li> <li>two</li> </ul> <h1>Hello</h1> </div>; }
Without JSX
function hello() { return; React.createElement( "div", null, React.createElement( "ul", { className: "numbers" }, React.createElement("li", null, "one"), React.createElement("li", null, "two") ), React.createElement("h1", null, "Hello") ); }
Resources:
- https://reactjs.org/docs/introducing-jsx.html
- https://babeljs.io/docs/en/
Happy Learning 📚
Comments
Post a Comment