Site icon C1CTech

ReactJS|Introduction to JSX

<p>In this article we will talk about what is JSX and why do we need JSX in react applications&period;We will also talk about basics of JSX and how to work with JSX &period;<&sol;p>&NewLine;<p><amp-youtube layout&equals;"responsive" width&equals;"1200" height&equals;"675" data-videoid&equals;"nI0hRB6SXoE" title&equals;"ReactJS Tutorial For Beginners - 7 - JSX"><a placeholder href&equals;"https&colon;&sol;&sol;youtu&period;be&sol;nI0hRB6SXoE"><img src&equals;"https&colon;&sol;&sol;i&period;ytimg&period;com&sol;vi&sol;nI0hRB6SXoE&sol;hqdefault&period;jpg" layout&equals;"fill" object-fit&equals;"cover" alt&equals;"ReactJS Tutorial For Beginners - 7 - JSX"><&sol;a><&sol;amp-youtube><&sol;p>&NewLine;<h3><span style&equals;"color&colon; &num;000080&semi;"><strong>What is JSX&quest;<&sol;strong><&sol;span><&sol;h3>&NewLine;<ul>&NewLine;<li>JSX &lpar;JavaScript XML&rpar; is an XML-like syntax extension of JavaScript&period; Here &&num;8220&semi;syntax extension&&num;8221&semi; means that JSX is not valid Javascript&period; Web browsers can&&num;8217&semi;t read it&period;<span style&equals;"font-size&colon; 13&period;0pt&semi; font-family&colon; 'Segoe UI'&comma;sans-serif&semi; color&colon; &num;484848&semi;"> <&sol;span><&sol;li>&NewLine;<li>It describes what the UI should look like&period;<&sol;li>&NewLine;<li>JSX may remind you of a template language&comma; but it comes with the full power of JavaScript&period;<&sol;li>&NewLine;<li>JSX is not understood by the browser therefore react uses babel compiler to convert JSX into pure JavaScript which is understood by the browser&period;<&sol;li>&NewLine;<&sol;ul>&NewLine;<p>Let us see a sample JSX code&colon;<&sol;p>&NewLine;<pre class&equals;"gatsby-code-jsx"><strong><code><span class&equals;"token keyword">const<&sol;span> element <span class&equals;"token operator">&equals;<&sol;span> <span class&equals;"token tag"><span class&equals;"token punctuation">&lt&semi;<&sol;span>h1<span class&equals;"token punctuation">&gt&semi;<&sol;span><&sol;span><span class&equals;"token plain-text">Hello&comma; world&excl;<&sol;span><span class&equals;"token tag"><span class&equals;"token punctuation">&lt&semi;&sol;<&sol;span>h1<span class&equals;"token punctuation">&gt&semi;<&sol;span><&sol;span><span class&equals;"token punctuation">&semi;<&sol;span><&sol;code><&sol;strong><&sol;pre>&NewLine;<p>The above code snippet somewhat looks like HTML and it also uses a JavaScript-like variable but is neither HTML nor JavaScript&comma; it is JSX&period;<&sol;p>&NewLine;<h3 style&equals;"text-align&colon; left&semi;" align&equals;"center"><span style&equals;"color&colon; &num;000080&semi;"><strong>Why do we need JSX&quest;<&sol;strong><&sol;span><&sol;h3>&NewLine;<ul>&NewLine;<li>It is faster than normal JavaScript as it performs optimizations while translating to regular JavaScript&period;<&sol;li>&NewLine;<li>JSX is not a necessity for react applications we can also use react without JSX but It makes react code simple and easy to understand&period;<&sol;li>&NewLine;<li>It makes easier for us to create templates&period;<&sol;li>&NewLine;<li>Instead of separating the markup and logic in separated files&comma; React uses <span style&equals;"color&colon; &num;008000&semi;"><strong><a style&equals;"color&colon; &num;008000&semi;" href&equals;"https&colon;&sol;&sol;c1ctech&period;com&sol;creating-first-react-component&sol;">components<&sol;a><&sol;strong><&sol;span> for this purpose which contains both&period;<&sol;li>&NewLine;<&sol;ul>&NewLine;<h3><strong><span style&equals;"color&colon; &num;000080&semi;">JSX Outer Elements<&sol;span><&sol;strong><&sol;h3>&NewLine;<p>A JSX expression must have exactly <em>one<&sol;em> outermost element&period;<&sol;p>&NewLine;<p>In other words&comma; this code will work&colon;<&sol;p>&NewLine;<pre><strong>const paragraphs &equals; &lpar;  &NewLine;&NewLine;&lt&semi;div id&equals;"i-am-the-outermost-element"&gt&semi;    &NewLine;&NewLine;&lt&semi;p&gt&semi;I am a paragraph&period;&lt&semi;&sol;p&gt&semi;    &NewLine;&NewLine;&lt&semi;p&gt&semi;I&comma; too&comma; am a paragraph&period;&lt&semi;&sol;p&gt&semi;  &NewLine;&NewLine;&lt&semi;&sol;div&gt&semi;&rpar;&semi;<&sol;strong><&sol;pre>&NewLine;<p>But this code will not work&colon;<&sol;p>&NewLine;<pre><strong>const paragraphs &equals; &lpar; &NewLine;&NewLine; &lt&semi;p&gt&semi;I am a paragraph&period;&lt&semi;&sol;p&gt&semi;  &NewLine;&NewLine; &lt&semi;p&gt&semi;I&comma; too&comma; am a paragraph&period;&lt&semi;&sol;p&gt&semi;&rpar;&semi;<&sol;strong><&sol;pre>&NewLine;<p>The first opening tag and the final closing tag of a JSX expression must belong to the same JSX element&excl;<&sol;p>&NewLine;<p>If you notice that a JSX expression has multiple outer elements&comma; the solution is usually simple&colon; wrap the JSX expression in a &lt&semi;div&gt&semi; &lt&semi;&sol;div&gt&semi;&period;<&sol;p>&NewLine;<h3 style&equals;"margin-top&colon; 0cm&semi; background&colon; white&semi;"><span style&equals;"color&colon; &num;000080&semi;"><strong>Using JavaScript expressions in JSX<&sol;strong><&sol;span><&sol;h3>&NewLine;<p>In React we are allowed to use normal JavaScript expressions with JSX&period; To embed any javascript expression in a piece of code written in JSX we will have to wrap that expression in curly braces &lbrace;&rcub;&period;<&sol;p>&NewLine;<p>You can put any valid <a href&equals;"https&colon;&sol;&sol;developer&period;mozilla&period;org&sol;en-US&sol;docs&sol;Web&sol;JavaScript&sol;Guide&sol;Expressions&lowbar;and&lowbar;Operators&num;Expressions"><strong><span style&equals;"color&colon; &num;008000&semi;">JavaScript expression<&sol;span><&sol;strong><&sol;a> inside the curly braces in JSX&period; For example&comma; <code>2 &plus; 2<&sol;code>&comma; <code>user&period;firstName<&sol;code>&comma; or <code>formatName&lpar;user&rpar;<&sol;code> are all valid JavaScript expressions&period; In the example below&comma; we embed the result of calling a JavaScript function&comma; <code>formatName&lpar;user&rpar;<&sol;code>&comma; into an element&period;<&sol;p>&NewLine;<pre class&equals;"gatsby-code-jsx"><code class&equals;"gatsby-code-jsx"><span class&equals;"token keyword">function<&sol;span> <span class&equals;"token function">formatName<&sol;span><span class&equals;"token punctuation">&lpar;<&sol;span>user<span class&equals;"token punctuation">&rpar;<&sol;span> <span class&equals;"token punctuation">&lbrace;<&sol;span>&NewLine; <span class&equals;"token keyword">return<&sol;span> user<span class&equals;"token punctuation">&period;<&sol;span>firstName <span class&equals;"token operator">&plus;<&sol;span> <span class&equals;"token string">' '<&sol;span> <span class&equals;"token operator">&plus;<&sol;span> user<span class&equals;"token punctuation">&period;<&sol;span>lastName<span class&equals;"token punctuation">&semi;<&sol;span>&NewLine;<span class&equals;"token punctuation">&rcub;<&sol;span><&sol;code><&sol;pre>&NewLine;<pre class&equals;"gatsby-code-jsx"><code class&equals;"gatsby-code-jsx"><span class&equals;"token keyword">const<&sol;span> user <span class&equals;"token operator">&equals;<&sol;span> <span class&equals;"token punctuation">&lbrace;<&sol;span>&NewLine; firstName<span class&equals;"token punctuation">&colon;<&sol;span> <span class&equals;"token string">'Harper'<&sol;span><span class&equals;"token punctuation">&comma;<&sol;span>&NewLine; lastName<span class&equals;"token punctuation">&colon;<&sol;span> <span class&equals;"token string">'Perez'<&sol;span>&NewLine;<span class&equals;"token punctuation">&rcub;<&sol;span><span class&equals;"token punctuation">&semi;<&sol;span>&NewLine;&NewLine;<span class&equals;"token keyword">const<&sol;span> element <span class&equals;"token operator">&equals;<&sol;span> <span class&equals;"token punctuation">&lpar;<&sol;span>&NewLine; <span class&equals;"token tag"><span class&equals;"token punctuation">&lt&semi;<&sol;span>h1<span class&equals;"token punctuation">&gt&semi;<&sol;span><&sol;span>&NewLine;<span class&equals;"gatsby-highlight-code-line"><span class&equals;"token plain-text"> Hello&comma; <&sol;span><span class&equals;"token punctuation">&lbrace;<&sol;span><span class&equals;"token function">formatName<&sol;span><span class&equals;"token punctuation">&lpar;<&sol;span>user<span class&equals;"token punctuation">&rpar;<&sol;span><span class&equals;"token punctuation">&rcub;<&sol;span><span class&equals;"token plain-text">&excl;<&sol;span>&NewLine;<&sol;span> <span class&equals;"token tag"><span class&equals;"token punctuation">&lt&semi;&sol;<&sol;span>h1<span class&equals;"token punctuation">&gt&semi;<&sol;span><&sol;span>&NewLine;<span class&equals;"token punctuation">&rpar;<&sol;span><span class&equals;"token punctuation">&semi;<&sol;span>&NewLine;&NewLine;ReactDOM<span class&equals;"token punctuation">&period;<&sol;span><span class&equals;"token function">render<&sol;span><span class&equals;"token punctuation">&lpar;<&sol;span>&NewLine; element<span class&equals;"token punctuation">&comma;<&sol;span>&NewLine; document<span class&equals;"token punctuation">&period;<&sol;span><span class&equals;"token function">getElementById<&sol;span><span class&equals;"token punctuation">&lpar;<&sol;span><span class&equals;"token string">'root'<&sol;span><span class&equals;"token punctuation">&rpar;<&sol;span>&NewLine;<span class&equals;"token punctuation">&rpar;<&sol;span><span class&equals;"token punctuation">&semi;<&sol;span><&sol;code><&sol;pre>&NewLine;<p>If a JSX expression takes up more than one line&comma; then you must wrap the multi-line JSX expression in parentheses&period;<&sol;p>&NewLine;<p>This is to make sure we are avoiding JavaScript’s automatic semicolon insertion which will add semicolons &lpar;based on rules given by the JavaScript specifications&rpar; to terminate statements when we don’t necessarily want&sol;expect that behavior in a JSX expression&period;<&sol;p>&NewLine;<p>For example&colon;<&sol;p>&NewLine;<pre><strong>const theExample &equals; &lpar;   &NewLine;&NewLine;&lt&semi;a href&equals;"https&colon;&sol;&sol;www&period;example&period;com"&gt&semi;    &NewLine;&NewLine; &lt&semi;h1&gt&semi;  Click me&excl;   &lt&semi;&sol;h1&gt&semi;   &NewLine;&NewLine;&lt&semi;&sol;a&gt&semi; &rpar;&semi;<&sol;strong><&sol;pre>&NewLine;<h3 id&equals;"jsx-is-an-expression-too"><strong><span style&equals;"color&colon; &num;000080&semi;">JSX is an Expression Too<&sol;span><&sol;strong><&sol;h3>&NewLine;<p>JSX is not understood by the browser therefore react uses Babel compiler &lpar;to convert JSX into pure javascript &rpar; and after compilation&comma; JSX expressions become regular JavaScript function calls and evaluate to JavaScript objects&period;<&sol;p>&NewLine;<p>This means that you can use JSX inside of <code>if<&sol;code> statements and <code>for<&sol;code> loops&comma; assign it to variables&comma; accept it as arguments&comma; and return it from functions&colon;<&sol;p>&NewLine;<div class&equals;"gatsby-highlight" data-language&equals;"jsx">&NewLine;<pre class&equals;"gatsby-code-jsx"><code class&equals;"gatsby-code-jsx"><span class&equals;"token keyword">function<&sol;span> <span class&equals;"token function">getGreeting<&sol;span><span class&equals;"token punctuation">&lpar;<&sol;span>user<span class&equals;"token punctuation">&rpar;<&sol;span> <span class&equals;"token punctuation">&lbrace;<&sol;span>&NewLine; <span class&equals;"token keyword">if<&sol;span> <span class&equals;"token punctuation">&lpar;<&sol;span>user<span class&equals;"token punctuation">&rpar;<&sol;span> <span class&equals;"token punctuation">&lbrace;<&sol;span>&NewLine;<span class&equals;"gatsby-highlight-code-line"> <span class&equals;"token keyword">return<&sol;span> <span class&equals;"token tag"><span class&equals;"token punctuation">&lt&semi;<&sol;span>h1<span class&equals;"token punctuation">&gt&semi;<&sol;span><&sol;span><span class&equals;"token plain-text">Hello&comma; <&sol;span><span class&equals;"token punctuation">&lbrace;<&sol;span><span class&equals;"token function">formatName<&sol;span><span class&equals;"token punctuation">&lpar;<&sol;span>user<span class&equals;"token punctuation">&rpar;<&sol;span><span class&equals;"token punctuation">&rcub;<&sol;span><span class&equals;"token plain-text">&excl;<&sol;span><span class&equals;"token tag"><span class&equals;"token punctuation">&lt&semi;&sol;<&sol;span>h1<span class&equals;"token punctuation">&gt&semi;<&sol;span><&sol;span><span class&equals;"token punctuation">&semi;<&sol;span>&NewLine;<&sol;span> <span class&equals;"token punctuation">&rcub;<&sol;span>&NewLine;<span class&equals;"gatsby-highlight-code-line"> <span class&equals;"token keyword">return<&sol;span> <span class&equals;"token tag"><span class&equals;"token punctuation">&lt&semi;<&sol;span>h1<span class&equals;"token punctuation">&gt&semi;<&sol;span><&sol;span><span class&equals;"token plain-text">Hello&comma; Stranger&period;<&sol;span><span class&equals;"token tag"><span class&equals;"token punctuation">&lt&semi;&sol;<&sol;span>h1<span class&equals;"token punctuation">&gt&semi;<&sol;span><&sol;span><span class&equals;"token punctuation">&semi;<&sol;span>&NewLine;<&sol;span><span class&equals;"token punctuation">&rcub;<&sol;span><&sol;code><&sol;pre>&NewLine;<&sol;div>&NewLine;<p>Here’s an example of a JSX element being saved in a variable&colon;<&sol;p>&NewLine;<pre><strong>const navBar &equals; &lt&semi;nav&gt&semi;I am a nav bar&lt&semi;&sol;nav&gt&semi;&semi;<&sol;strong><&sol;pre>&NewLine;<p>Here’s an example of several JSX elements being stored in an object&colon;<&sol;p>&NewLine;<pre><strong>const myTeam &equals; &lbrace;  &NewLine;&NewLine;center&colon; &lt&semi;li&gt&semi;Benzo Walli&lt&semi;&sol;li&gt&semi;&comma;  &NewLine;&NewLine;powerForward&colon; &lt&semi;li&gt&semi;Rasha Loa&lt&semi;&sol;li&gt&semi;&comma;  &NewLine;&NewLine;smallForward&colon; &lt&semi;li&gt&semi;Tayshaun Dasmoto&lt&semi;&sol;li&gt&semi;&comma;  &NewLine;&NewLine;shootingGuard&colon; &lt&semi;li&gt&semi;Colmar Cumberbatch&lt&semi;&sol;li&gt&semi;&comma;  &NewLine;&NewLine;pointGuard&colon; &lt&semi;li&gt&semi;Femi Billon&lt&semi;&sol;li&gt&semi;&rcub;&semi;<&sol;strong><&sol;pre>&NewLine;<h3 id&equals;"specifying-attributes-with-jsx"><strong><span style&equals;"color&colon; &num;000080&semi;">Specifying Attributes with JSX<&sol;span><&sol;strong><&sol;h3>&NewLine;<p>JSX elements can have <em>attributes<&sol;em>&comma; just like HTML elements can&period; But instead of the normal naming convention of HTML&comma; JSX uses camelCase convention for attributes&period;<&sol;p>&NewLine;<p>For example&comma;<&sol;p>&NewLine;<pre><span class&equals;"cm-keyword"><span style&equals;"font-size&colon; 13&period;5pt&semi; font-family&colon; Consolas&semi;">const<&sol;span><&sol;span> <span class&equals;"cm-def"><span style&equals;"font-size&colon; 13&period;5pt&semi; font-family&colon; Consolas&semi;">panda<&sol;span><&sol;span><span style&equals;"font-size&colon; 13&period;5pt&semi; font-family&colon; Consolas&semi;"> <span class&equals;"cm-operator">&equals;<&sol;span> <&sol;span><span class&equals;"cm-tag"><span style&equals;"font-size&colon; 13&period;5pt&semi; font-family&colon; Consolas&semi;">&lt&semi;img<&sol;span><&sol;span> <span class&equals;"cm-attribute"><span style&equals;"font-size&colon; 13&period;5pt&semi; font-family&colon; Consolas&semi;">src<&sol;span><&sol;span><span style&equals;"font-size&colon; 13&period;5pt&semi; font-family&colon; Consolas&semi;">&equals;<&sol;span><span class&equals;"cm-string"><span style&equals;"font-size&colon; 13&period;5pt&semi; font-family&colon; Consolas&semi;">"images&sol;panda&period;jpg"<&sol;span><&sol;span> &NewLine;&NewLine;<span class&equals;"cm-attribute"><span style&equals;"font-size&colon; 13&period;5pt&semi; font-family&colon; Consolas&semi;">alt<&sol;span><&sol;span><span style&equals;"font-size&colon; 13&period;5pt&semi; font-family&colon; Consolas&semi;">&equals;<&sol;span><span class&equals;"cm-string"><span style&equals;"font-size&colon; 13&period;5pt&semi; font-family&colon; Consolas&semi;">"panda"<&sol;span><&sol;span> &NewLine;&NewLine;<span class&equals;"cm-attribute"><span style&equals;"font-size&colon; 13&period;5pt&semi; font-family&colon; Consolas&semi;">width<&sol;span><&sol;span><span style&equals;"font-size&colon; 13&period;5pt&semi; font-family&colon; Consolas&semi;">&equals;<&sol;span><span class&equals;"cm-string"><span style&equals;"font-size&colon; 13&period;5pt&semi; font-family&colon; Consolas&semi;">"500px"<&sol;span><&sol;span> &NewLine;&NewLine;<span class&equals;"cm-attribute"><span style&equals;"font-size&colon; 13&period;5pt&semi; font-family&colon; Consolas&semi;">height<&sol;span><&sol;span><span style&equals;"font-size&colon; 13&period;5pt&semi; font-family&colon; Consolas&semi;">&equals;<&sol;span><span class&equals;"cm-string"><span style&equals;"font-size&colon; 13&period;5pt&semi; font-family&colon; Consolas&semi;">"500px"<&sol;span><&sol;span> <span class&equals;"cm-tag"><span style&equals;"font-size&colon; 13&period;5pt&semi; font-family&colon; Consolas&semi;">&sol;&gt&semi;<&sol;span><&sol;span><span style&equals;"font-size&colon; 13&period;5pt&semi; font-family&colon; Consolas&semi;">&semi;<&sol;span><&sol;pre>&NewLine;<p>We can also use custom attributes in JSX&period; For example &comma;<&sol;p>&NewLine;<pre class&equals;"line number6 index5 alt1"><code><&sol;code><&sol;pre>&NewLine;<pre class&equals;"line number6 index5 alt1"><strong><code>const element &equals; &lt&semi;div&gt&semi;<&sol;code> <code>&lt&semi;h1 className &equals;<&sol;code><code>"hello"<&sol;code><code>&gt&semi;Hello World&lt&semi;&sol;h1&gt&semi; <&sol;code> <code>&lt&semi;h2 data-sampleAttribute&equals;<&sol;code><code>"sample"<&sol;code><code>&gt&semi;&NewLine; Custom attribute&lt&semi;&sol;h2&gt&semi;<&sol;code> <code>&lt&semi; &sol;div&gt&semi;&semi;<&sol;code><&sol;strong><&sol;pre>&NewLine;<pre class&equals;"line number6 index5 alt1"><code><&sol;code><&sol;pre>&NewLine;<p><strong><span style&equals;"color&colon; &num;003366&semi;">Specifying attribute values &colon; <&sol;span><&sol;strong>JSX allows us to specify attribute values in two ways&colon;<&sol;p>&NewLine;<ol>&NewLine;<li><strong><span style&equals;"color&colon; &num;0000ff&semi;">As string literals&colon;<&sol;span> <&sol;strong>We can specify the values of attributes as hard-coded strings using quotes&colon;&NewLine;<pre><strong><code><span class&equals;"token keyword">const<&sol;span> element <span class&equals;"token operator">&equals;<&sol;span> <span class&equals;"token tag"><span class&equals;"token punctuation">&lt&semi;<&sol;span>div <span class&equals;"token attr-name">tabIndex<&sol;span><span class&equals;"token attr-value"><span class&equals;"token punctuation">&equals;<&sol;span><span class&equals;"token punctuation">"<&sol;span>0<span class&equals;"token punctuation">"<&sol;span><&sol;span><span class&equals;"token punctuation">&gt&semi;<&sol;span><&sol;span><span class&equals;"token tag"><span class&equals;"token punctuation">&lt&semi;&sol;<&sol;span>div<span class&equals;"token punctuation">&gt&semi;<&sol;span><&sol;span><span class&equals;"token punctuation">&semi;<&sol;span><&sol;code><&sol;strong><&sol;pre>&NewLine;<&sol;li>&NewLine;<li><strong><span style&equals;"color&colon; &num;0000ff&semi;">As javascript expressions&colon;<&sol;span><&sol;strong> We can specify attributes as expressions using curly braces &lbrace;&rcub;&colon;&NewLine;<pre><strong>const varName&equals;"Honey"&semi;&NewLine;var ele &equals; &lt&semi;h1 className &equals; &lbrace;varName&rcub;&gt&semi;Hello&excl;&lt&semi;&sol;h1&gt&semi;&semi;<&sol;strong><&sol;pre>&NewLine;<&sol;li>&NewLine;<&sol;ol>&NewLine;<p>&nbsp&semi;<&sol;p>&NewLine;<p><strong><span style&equals;"color&colon; &num;000080&semi;">Note&colon;<&sol;span> We cannot use class and for attribute names used in Html&comma; Instead we have to use className and htmlFor attribute  in JSX&period;<&sol;strong> <span style&equals;"font-family&colon; 'Segoe UI'&comma;sans-serif&semi; color&colon; &num;484848&semi;">This is because JSX gets translated into JavaScript&comma; and <&sol;span><code><span style&equals;"font-size&colon; 10&period;0pt&semi; font-family&colon; Consolas&semi; color&colon; &num;15141f&semi; background&colon; &num;DFE0E0&semi;">class<&sol;span><&sol;code><span style&equals;"font-family&colon; 'Segoe UI'&comma;sans-serif&semi; color&colon; &num;484848&semi;"> and <strong>for<&sol;strong> are the reserved words in JavaScript&period;<&sol;span><&sol;p>&NewLine;<&excl;-- WP QUADS Content Ad Plugin v&period; 2&period;0&period;98&period;1 -->&NewLine;<div class&equals;"quads-location quads-ad2" id&equals;"quads-ad2" style&equals;"float&colon;none&semi;margin&colon;0px&semi;">&NewLine;&NewLine;<&sol;div>&NewLine;&NewLine;<p style&equals;"margin&colon; 0cm&semi; margin-bottom&colon; &period;0001pt&semi; background&colon; white&semi;"><span style&equals;"font-family&colon; 'Segoe UI'&comma;sans-serif&semi; color&colon; &num;484848&semi;">When JSX is <span style&equals;"font-family&colon; 'Segoe UI'&comma;sans-serif&semi;">rendered<&sol;span>&comma; JSX <&sol;span><code><span style&equals;"font-size&colon; 10&period;0pt&semi; font-family&colon; Consolas&semi; color&colon; &num;15141f&semi; background&colon; &num;DFE0E0&semi;">className<&sol;span><&sol;code><span style&equals;"font-family&colon; 'Segoe UI'&comma;sans-serif&semi; color&colon; &num;484848&semi;"> attributes are automatically rendered as <&sol;span><code><span style&equals;"font-size&colon; 10&period;0pt&semi; font-family&colon; Consolas&semi; color&colon; &num;15141f&semi; background&colon; &num;DFE0E0&semi;">class<&sol;span><&sol;code><span style&equals;"font-family&colon; 'Segoe UI'&comma;sans-serif&semi; color&colon; &num;484848&semi;"> attribute and <strong>htmlFor<&sol;strong> get rendered as <strong>for<&sol;strong> attribute &period;<&sol;span><&sol;p>&NewLine;<h3><&sol;h3>&NewLine;<h3 id&equals;"children-in-jsx"><strong><span style&equals;"color&colon; &num;000080&semi;">Children in JSX<&sol;span><&sol;strong><&sol;h3>&NewLine;<p>In JSX expressions that contain both an opening tag and a closing tag&comma; the content between those tags is known as JSX children and is passed as a special prop&colon; <code>props&period;children<&sol;code>&period;<&sol;p>&NewLine;<p><span style&equals;"color&colon; &num;003366&semi;"><strong>Specifying children <&sol;strong>&colon;<&sol;span> There are several different ways to pass children in JSX&colon;<&sol;p>&NewLine;<p id&equals;"string-literals-1"><span style&equals;"color&colon; &num;0000ff&semi;"><strong>As String Literals<&sol;strong> &colon;<&sol;span>You can put a string between the opening and closing tags and <code>props&period;children<&sol;code> will just be that string&period;  For example&colon;<&sol;p>&NewLine;<div class&equals;"gatsby-highlight" data-language&equals;"jsx">&NewLine;<pre class&equals;"gatsby-code-jsx"><code><span class&equals;"token tag"><span class&equals;"token punctuation">&lt&semi;<&sol;span>MyComponent<span class&equals;"token punctuation">&gt&semi; <&sol;span><&sol;span><span class&equals;"token plain-text">Hello world&excl;<&sol;span><span class&equals;"token tag"><span class&equals;"token punctuation">&lt&semi;&sol;<&sol;span>MyComponent<span class&equals;"token punctuation">&gt&semi;<&sol;span><&sol;span><&sol;code><&sol;pre>&NewLine;<&sol;div>&NewLine;<p><code>props&period;children<&sol;code> in <code>MyComponent<&sol;code> will simply be the string <code>"Hello world&excl;"<&sol;code>&period;<&sol;p>&NewLine;<p id&equals;"jsx-children"><span style&equals;"color&colon; &num;0000ff&semi;"><strong>As JSX Children<&sol;strong> &colon;<&sol;span> You can provide more JSX elements as the children&period; This is useful for displaying nested components&period; For example&colon;<&sol;p>&NewLine;<pre class&equals;"gatsby-code-html"><code class&equals;"gatsby-code-html"><span class&equals;"token tag"><span class&equals;"token punctuation">&lt&semi;<&sol;span>div<span class&equals;"token punctuation">&gt&semi;<&sol;span><&sol;span>&NewLine; Here is a list&colon;&NewLine; <span class&equals;"token tag"><span class&equals;"token punctuation">&lt&semi;<&sol;span>ul<span class&equals;"token punctuation">&gt&semi;<&sol;span><&sol;span>&NewLine; <span class&equals;"token tag"><span class&equals;"token punctuation">&lt&semi;<&sol;span>li<span class&equals;"token punctuation">&gt&semi;<&sol;span><&sol;span>Item 1<span class&equals;"token tag"><span class&equals;"token punctuation">&lt&semi;&sol;<&sol;span>li<span class&equals;"token punctuation">&gt&semi;<&sol;span><&sol;span>&NewLine; <span class&equals;"token tag"><span class&equals;"token punctuation">&lt&semi;<&sol;span>li<span class&equals;"token punctuation">&gt&semi;<&sol;span><&sol;span>Item 2<span class&equals;"token tag"><span class&equals;"token punctuation">&lt&semi;&sol;<&sol;span>li<span class&equals;"token punctuation">&gt&semi;<&sol;span><&sol;span>&NewLine; <span class&equals;"token tag"><span class&equals;"token punctuation">&lt&semi;&sol;<&sol;span>ul<span class&equals;"token punctuation">&gt&semi;<&sol;span><&sol;span>&NewLine;<span class&equals;"token tag"><span class&equals;"token punctuation">&lt&semi;&sol;<&sol;span>div<span class&equals;"token punctuation">&gt&semi;<&sol;span><&sol;span><&sol;code><&sol;pre>&NewLine;<p>A React component can also return an array of elements&colon;<&sol;p>&NewLine;<div class&equals;"gatsby-highlight" data-language&equals;"jsx">&NewLine;<pre class&equals;"gatsby-code-jsx"><code class&equals;"gatsby-code-jsx"><span class&equals;"token function">render<&sol;span><span class&equals;"token punctuation">&lpar;<&sol;span><span class&equals;"token punctuation">&rpar;<&sol;span> <span class&equals;"token punctuation">&lbrace;<&sol;span>&NewLine; <span class&equals;"token comment">&sol;&sol; No need to wrap list items in an extra element&excl;<&sol;span>&NewLine; <span class&equals;"token keyword">return<&sol;span> <span class&equals;"token punctuation">&lbrack;<&sol;span>&NewLine; <span class&equals;"token comment">&sol;&sol; Don't forget the keys &colon;&rpar;<&sol;span>&NewLine; <span class&equals;"token tag"><span class&equals;"token punctuation">&lt&semi;<&sol;span>li <span class&equals;"token attr-name">key<&sol;span><span class&equals;"token attr-value"><span class&equals;"token punctuation">&equals;<&sol;span><span class&equals;"token punctuation">"<&sol;span>A<span class&equals;"token punctuation">"<&sol;span><&sol;span><span class&equals;"token punctuation">&gt&semi;<&sol;span><&sol;span><span class&equals;"token plain-text">First item<&sol;span><span class&equals;"token tag"><span class&equals;"token punctuation">&lt&semi;&sol;<&sol;span>li<span class&equals;"token punctuation">&gt&semi;<&sol;span><&sol;span><span class&equals;"token punctuation">&comma;<&sol;span>&NewLine; <span class&equals;"token tag"><span class&equals;"token punctuation">&lt&semi;<&sol;span>li <span class&equals;"token attr-name">key<&sol;span><span class&equals;"token attr-value"><span class&equals;"token punctuation">&equals;<&sol;span><span class&equals;"token punctuation">"<&sol;span>B<span class&equals;"token punctuation">"<&sol;span><&sol;span><span class&equals;"token punctuation">&gt&semi;<&sol;span><&sol;span><span class&equals;"token plain-text">Second item<&sol;span><span class&equals;"token tag"><span class&equals;"token punctuation">&lt&semi;&sol;<&sol;span>li<span class&equals;"token punctuation">&gt&semi;<&sol;span><&sol;span><span class&equals;"token punctuation">&comma;<&sol;span>&NewLine; <span class&equals;"token tag"><span class&equals;"token punctuation">&lt&semi;<&sol;span>li <span class&equals;"token attr-name">key<&sol;span><span class&equals;"token attr-value"><span class&equals;"token punctuation">&equals;<&sol;span><span class&equals;"token punctuation">"<&sol;span>C<span class&equals;"token punctuation">"<&sol;span><&sol;span><span class&equals;"token punctuation">&gt&semi;<&sol;span><&sol;span><span class&equals;"token plain-text">Third item<&sol;span><span class&equals;"token tag"><span class&equals;"token punctuation">&lt&semi;&sol;<&sol;span>li<span class&equals;"token punctuation">&gt&semi;<&sol;span><&sol;span><span class&equals;"token punctuation">&comma;<&sol;span>&NewLine; <span class&equals;"token punctuation">&rsqb;<&sol;span><span class&equals;"token punctuation">&semi;<&sol;span>&NewLine;<span class&equals;"token punctuation">&rcub;<&sol;span><&sol;code><&sol;pre>&NewLine;<&sol;div>&NewLine;<h3><&sol;h3>&NewLine;<p id&equals;"javascript-expressions-as-children"><strong><span style&equals;"color&colon; &num;0000ff&semi;">As JavaScript Expressions &colon;<&sol;span><&sol;strong> You can pass any JavaScript expression as children&comma; by enclosing it within <code>&lbrace;&rcub;<&sol;code>&period; For example&comma;<&sol;p>&NewLine;<pre class&equals;"gatsby-code-jsx"><code class&equals;"gatsby-code-jsx"><span class&equals;"token keyword">function<&sol;span> <span class&equals;"token function">Hello<&sol;span><span class&equals;"token punctuation">&lpar;<&sol;span>props<span class&equals;"token punctuation">&rpar;<&sol;span> <span class&equals;"token punctuation">&lbrace;<&sol;span>&NewLine;<span class&equals;"gatsby-highlight-code-line"> <span class&equals;"token keyword">return<&sol;span> <span class&equals;"token tag"><span class&equals;"token punctuation">&lt&semi;<&sol;span>div<span class&equals;"token punctuation">&gt&semi;<&sol;span><&sol;span><span class&equals;"token plain-text">Hello <&sol;span><span class&equals;"token punctuation">&lbrace;<&sol;span>props<span class&equals;"token punctuation">&period;<&sol;span>addressee<span class&equals;"token punctuation">&rcub;<&sol;span><span class&equals;"token plain-text">&excl;<&sol;span><span class&equals;"token tag"><span class&equals;"token punctuation">&lt&semi;&sol;<&sol;span>div<span class&equals;"token punctuation">&gt&semi;<&sol;span><&sol;span><span class&equals;"token punctuation">&semi;<&sol;span>&NewLine;<&sol;span><span class&equals;"token punctuation">&rcub;<&sol;span><&sol;code><&sol;pre>&NewLine;<p><strong><span style&equals;"color&colon; &num;0000ff&semi;">As Functions &colon;<&sol;span><&sol;strong>  You can also pass function as JSX children &period;For example&comma; if you have a custom component&comma; you could have it take a callback as <code>props&period;children<&sol;code>&colon;<code><&sol;code><&sol;p>&NewLine;<pre class&equals;"gatsby-code-jsx"><code class&equals;"gatsby-code-jsx"><span class&equals;"token comment">&sol;&sol; Calls the children callback numTimes to produce a repeated component<&sol;span>&NewLine;<span class&equals;"token keyword">function<&sol;span> <span class&equals;"token function">Repeat<&sol;span><span class&equals;"token punctuation">&lpar;<&sol;span>props<span class&equals;"token punctuation">&rpar;<&sol;span> <span class&equals;"token punctuation">&lbrace;<&sol;span>&NewLine; <span class&equals;"token keyword">let<&sol;span> items <span class&equals;"token operator">&equals;<&sol;span> <span class&equals;"token punctuation">&lbrack;<&sol;span><span class&equals;"token punctuation">&rsqb;<&sol;span><span class&equals;"token punctuation">&semi;<&sol;span>&NewLine;<span class&equals;"gatsby-highlight-code-line"> <span class&equals;"token keyword">for<&sol;span> <span class&equals;"token punctuation">&lpar;<&sol;span><span class&equals;"token keyword">let<&sol;span> i <span class&equals;"token operator">&equals;<&sol;span> <span class&equals;"token number">0<&sol;span><span class&equals;"token punctuation">&semi;<&sol;span> i <span class&equals;"token operator">&lt&semi;<&sol;span> props<span class&equals;"token punctuation">&period;<&sol;span>numTimes<span class&equals;"token punctuation">&semi;<&sol;span> i<span class&equals;"token operator">&plus;&plus;<&sol;span><span class&equals;"token punctuation">&rpar;<&sol;span> <span class&equals;"token punctuation">&lbrace;<&sol;span>&NewLine;<&sol;span> items<span class&equals;"token punctuation">&period;<&sol;span><span class&equals;"token function">push<&sol;span><span class&equals;"token punctuation">&lpar;<&sol;span>props<span class&equals;"token punctuation">&period;<&sol;span><span class&equals;"token function">children<&sol;span><span class&equals;"token punctuation">&lpar;<&sol;span>i<span class&equals;"token punctuation">&rpar;<&sol;span><span class&equals;"token punctuation">&rpar;<&sol;span><span class&equals;"token punctuation">&semi;<&sol;span>&NewLine; <span class&equals;"token punctuation">&rcub;<&sol;span>&NewLine; <span class&equals;"token keyword">return<&sol;span> <span class&equals;"token tag"><span class&equals;"token punctuation">&lt&semi;<&sol;span>div<span class&equals;"token punctuation">&gt&semi;<&sol;span><&sol;span><span class&equals;"token punctuation">&lbrace;<&sol;span>items<span class&equals;"token punctuation">&rcub;<&sol;span><span class&equals;"token tag"><span class&equals;"token punctuation">&lt&semi;&sol;<&sol;span>div<span class&equals;"token punctuation">&gt&semi;<&sol;span><&sol;span><span class&equals;"token punctuation">&semi;<&sol;span>&NewLine;<span class&equals;"token punctuation">&rcub;<&sol;span>&NewLine;&NewLine;<span class&equals;"token keyword">function<&sol;span> <span class&equals;"token function">ListOfTenThings<&sol;span><span class&equals;"token punctuation">&lpar;<&sol;span><span class&equals;"token punctuation">&rpar;<&sol;span> <span class&equals;"token punctuation">&lbrace;<&sol;span>&NewLine; <span class&equals;"token keyword">return<&sol;span> <span class&equals;"token punctuation">&lpar;<&sol;span>&NewLine; <span class&equals;"token tag"><span class&equals;"token punctuation">&lt&semi;<&sol;span>Repeat <span class&equals;"token attr-name">numTimes<&sol;span><span class&equals;"token script language-javascript"><span class&equals;"token script-punctuation punctuation">&equals;<&sol;span><span class&equals;"token punctuation">&lbrace;<&sol;span><span class&equals;"token number">10<&sol;span><span class&equals;"token punctuation">&rcub;<&sol;span><&sol;span><span class&equals;"token punctuation">&gt&semi;<&sol;span><&sol;span>&NewLine;<span class&equals;"gatsby-highlight-code-line"> <span class&equals;"token punctuation">&lbrace;<&sol;span><span class&equals;"token punctuation">&lpar;<&sol;span>index<span class&equals;"token punctuation">&rpar;<&sol;span> <span class&equals;"token operator">&equals;&gt&semi;<&sol;span> <span class&equals;"token tag"><span class&equals;"token punctuation">&lt&semi;<&sol;span>div <span class&equals;"token attr-name">key<&sol;span><span class&equals;"token script language-javascript"><span class&equals;"token script-punctuation punctuation">&equals;<&sol;span><span class&equals;"token punctuation">&lbrace;<&sol;span>index<span class&equals;"token punctuation">&rcub;<&sol;span><&sol;span><span class&equals;"token punctuation">&gt&semi;<&sol;span><&sol;span><span class&equals;"token plain-text">This is item <&sol;span><span class&equals;"token punctuation">&lbrace;<&sol;span>index<span class&equals;"token punctuation">&rcub;<&sol;span><span class&equals;"token plain-text"> in the list<&sol;span><span class&equals;"token tag"><span class&equals;"token punctuation">&lt&semi;&sol;<&sol;span>div<span class&equals;"token punctuation">&gt&semi;<&sol;span><&sol;span><span class&equals;"token punctuation">&rcub;<&sol;span>&NewLine;<&sol;span> <span class&equals;"token tag"><span class&equals;"token punctuation">&lt&semi;&sol;<&sol;span>Repeat<span class&equals;"token punctuation">&gt&semi;<&sol;span><&sol;span>&NewLine; <span class&equals;"token punctuation">&rpar;<&sol;span><span class&equals;"token punctuation">&semi;<&sol;span>&NewLine;<span class&equals;"token punctuation">&rcub;<&sol;span><&sol;code><&sol;pre>&NewLine;<pre class&equals;"gatsby-code-jsx"><code><&sol;code><&sol;pre>&NewLine;<h3 id&equals;"jsx-represents-objects"><strong><span style&equals;"color&colon; &num;000080&semi;">JSX Represents Objects<&sol;span><&sol;strong><&sol;h3>&NewLine;<p>Babel compiles JSX down to <code>React&period;createElement&lpar;&rpar;<&sol;code> calls&period;For example&comma;<&sol;p>&NewLine;<p>Given below is the JSX expression assigning to a variable element&period;<&sol;p>&NewLine;<div class&equals;"gatsby-highlight" data-language&equals;"jsx">&NewLine;<pre class&equals;"gatsby-code-jsx"><code class&equals;"gatsby-code-jsx"><span class&equals;"token keyword">const<&sol;span> element <span class&equals;"token operator">&equals;<&sol;span> <span class&equals;"token punctuation">&lpar;<&sol;span>&NewLine; <span class&equals;"token tag"><span class&equals;"token punctuation">&lt&semi;<&sol;span>h1 <span class&equals;"token attr-name">className<&sol;span><span class&equals;"token attr-value"><span class&equals;"token punctuation">&equals;<&sol;span><span class&equals;"token punctuation">"<&sol;span>greeting<span class&equals;"token punctuation">"<&sol;span><&sol;span><span class&equals;"token punctuation">&gt&semi;<&sol;span><&sol;span><span class&equals;"token plain-text">&NewLine; Hello&comma; world&excl;&NewLine; <&sol;span><span class&equals;"token tag"><span class&equals;"token punctuation">&lt&semi;&sol;<&sol;span>h1<span class&equals;"token punctuation">&gt&semi;<&sol;span><&sol;span>&NewLine;<span class&equals;"token punctuation">&rpar;<&sol;span><span class&equals;"token punctuation">&semi;&NewLine;&NewLine;<&sol;span><&sol;code><&sol;pre>&NewLine;<&sol;div>&NewLine;<div class&equals;"gatsby-highlight" data-language&equals;"jsx">Corresponding to the above JSX code the createElement function call look like this as shown below&colon;<&sol;div>&NewLine;<pre class&equals;"gatsby-code-jsx"><code class&equals;"gatsby-code-jsx"><span class&equals;"token keyword">const<&sol;span> element <span class&equals;"token operator">&equals;<&sol;span> React<span class&equals;"token punctuation">&period;<&sol;span><span class&equals;"token function">createElement<&sol;span><span class&equals;"token punctuation">&lpar;<&sol;span>&NewLine; <span class&equals;"token string">'h1'<&sol;span><span class&equals;"token punctuation">&comma;<&sol;span>&NewLine; <span class&equals;"token punctuation">&lbrace;<&sol;span>className<span class&equals;"token punctuation">&colon;<&sol;span> <span class&equals;"token string">'greeting'<&sol;span><span class&equals;"token punctuation">&rcub;<&sol;span><span class&equals;"token punctuation">&comma;<&sol;span>&NewLine; <span class&equals;"token string">'Hello&comma; world&excl;'<&sol;span>&NewLine;<span class&equals;"token punctuation">&rpar;<&sol;span><span class&equals;"token punctuation">&semi;<&sol;span><&sol;code><&sol;pre>&NewLine;<p><code>React&period;createElement&lpar;&rpar;<&sol;code> create and return react element look like this &colon;<&sol;p>&NewLine;<div class&equals;"gatsby-highlight" data-language&equals;"jsx">&NewLine;<pre class&equals;"gatsby-code-jsx"><code class&equals;"gatsby-code-jsx"><span class&equals;"token comment">&sol;&sol; Note&colon; this structure is simplified<&sol;span>&NewLine;<span class&equals;"token keyword">const<&sol;span> element <span class&equals;"token operator">&equals;<&sol;span> <span class&equals;"token punctuation">&lbrace;<&sol;span>&NewLine; type<span class&equals;"token punctuation">&colon;<&sol;span> <span class&equals;"token string">'h1'<&sol;span><span class&equals;"token punctuation">&comma;<&sol;span>&NewLine; props<span class&equals;"token punctuation">&colon;<&sol;span> <span class&equals;"token punctuation">&lbrace;<&sol;span>&NewLine; className<span class&equals;"token punctuation">&colon;<&sol;span> <span class&equals;"token string">'greeting'<&sol;span><span class&equals;"token punctuation">&comma;<&sol;span>&NewLine; children<span class&equals;"token punctuation">&colon;<&sol;span> <span class&equals;"token string">'Hello&comma; world&excl;'<&sol;span>&NewLine; <span class&equals;"token punctuation">&rcub;<&sol;span>&NewLine;<span class&equals;"token punctuation">&rcub;<&sol;span><span class&equals;"token punctuation">&semi;<&sol;span><&sol;code><&sol;pre>&NewLine;<&sol;div>&NewLine;<p>These objects are called <strong><span style&equals;"color&colon; &num;008000&semi;">&OpenCurlyDoubleQuote;React elements”<&sol;span><&sol;strong>&period; You can think of them as descriptions of what you want to see on the screen&period; React reads these objects and uses them to construct the DOM and keep it up to date&period;<&sol;p>&NewLine;<h3><span style&equals;"color&colon; &num;000080&semi;"><strong>Comments in JSX<&sol;strong><&sol;span><&sol;h3>&NewLine;<p>JSX allows us to use comments as it allows us to use JavaScript expressions&period; Comments in JSX begins with <strong>&sol;<&sol;strong> and ends with <strong>&sol;<&sol;strong>&period; We can add comments in JSX by wrapping them in curly braces &lbrace;&rcub; just like we did in the case of expressions&period; Below example shows how to add comments in JSX&colon;<&sol;p>&NewLine;<pre class&equals;"line number6 index5 alt1"><code>const element &equals; &lt&semi;div&gt&semi;&NewLine;<&sol;code> <code>&lt&semi;h1&gt&semi;Hello World &excl;&lt&semi;&sol;h1&gt&semi; <&sol;code> <code>&lbrace;&sol; &ast; This is a comment <&sol;code><code>in<&sol;code> <code>JSX &ast; &sol;&rcub; <&sol;code> <code>&lt&semi;&sol;div&gt&semi;&semi;<&sol;code><&sol;pre>&NewLine;<pre class&equals;"line number6 index5 alt1"><code><&sol;code><&sol;pre>&NewLine;&NewLine;

Exit mobile version