React's props with the same name as their value

Booleans can be passed implicitly to the component as @Ajay also pointed out in comments, like

<div x />

which is basically equivalent to

<div x={true} />

However, if your variable is something other than a boolean, than you need to write it like

<div x={x} />

Or if you have a number of such props, you can form an object like

const cmpProps = {
   x,
   y,
   foo,
   bar
}

and pass them using Spread attributes like

<Comp {...cmpProps} />

I had a slight epiphany when reading these answers. Since in ES6+ you can add an existing variable to an object like this:

const x = 42;
const obj = { x, y: 1337 };
console.log(obj); // result { x: 42, y: 1337 }

That means you can add a named prop to a React component like:

const x = 42;
const elm = <MyComponent {...{x}} />;

You can't, a prop with no assigned value (<div x />) is a shortener for (<div x={true} />) (as Ajay Varghese pointed out);

Passing the same variable name would be <div x={x} />

If you need to pass multiple values directly in JSX props you can use the JSX Spread Attributes.

const divProps = { x: 1, y: 2 };
...
<div {...divProps} />

It is often used to pass all props from parent to children.

You can also override a prop by assigning it after the spread :

<div {...divProps} x=3 />

Tags:

Reactjs