writing if-else in jsx while writing react code is not working.
<div id={if (condition) { 'msg' }}>Hello World!</div>
However using ternary operator works.
<div id={condition ? 'msg' : null}>Hello World!</div>
why is this happening?
if-else statements don't work inside JSX. This is because JSX is just syntactic sugar for function calls and object construction.
if/else. Conditional rendering in React works the same way conditions work in JavaScript. Use JavaScript operators like if, and let React update the UI to match them. We use an if with our condition and return the element to be rendered.
Yes you an create a for loop inside react JSX with the help of function callback approach.
js error "JSX expressions must have one parent element" occurs when a component returns multiple elements. To solve the error, wrap the elements in a parent div element or use a fragment, e.g. <><h2>One</h2><h2>Two</h2></> .
Your JSX of
<div id={condition ? 'msg' : null}>Hello World!</div>
which is not valid Javascript by itself, will be compiled into the following ReactJS call:
React.createElement(
'div', // Element "tag" name.
{ id: condition ? 'msg' : null }, // Properties object.
'Hello World!' // Element contents.
);
which is valid Javascript, ready to be interpreted/compiled by your Javascript runtime environment. As you can see, there is no way to jam an if-else
into that statement, as it cannot be compiled into valid Javascript.
You could instead use an immediately-invoked function expression and pass the value returned from within:
<div id={(function () {
if (condition) {
return "msg";
} else {
return null;
}
})()}>Hello World!</div>
which will compile into the following valid Javascript:
React.createElement(
"div",
{
id: (function () {
if (condition) {
return "msg";
} else {
return null;
}
})()
},
"Hello World!"
);
if-else statements don't work inside JSX. This is because JSX is just syntactic sugar for function calls and object construction. React Docs
// This JSX:
<div id={if (condition) { 'msg' }}>Hello World!</div>
// Is transformed to this JS:
React.createElement("div", {id: if (condition) { 'msg' }}, "Hello World!");
So, you see if/else does not fit in this model. Better to use it outside of jsx. may be in render function.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With