Monday, May 13, 2024
 Popular · Latest · Hot · Upcoming
73
rated 0 times [  77] [ 4]  / answers: 1 / hits: 42710  / 8 Years ago, wed, june 15, 2016, 12:00:00

How does one pass a prop without value to a react component?



<SomeComponent disableHeight> {/* here */}
{({width}) => (
<AnotherComponent
autoHeight {/* and here */}
width={width}
height={300}
{...otherProps}
/>
)}
</SomeComponent>


Note - there is no default prop values specified for those props.



I can't seem to find any references on that, but by observing values for those properties they get assigned to true by default.


More From » reactjs

 Answers
0

What you are passing is interpreted by the compiler as a boolean attribute. This is also true for when writing pure HTML; attributes without values are interpreted as a boolean true. Since JSX is a syntactic-sugar for writing HTML, it makes sense that it has the same behavior.



The official React documentation has the following:




Boolean Attributes



This often comes up when using HTML form elements, with attributes
like disabled, required, checked and readOnly.
Omitting the value of an attribute causes JSX to treat it as true. To
pass false an attribute expression must be used.



// These two are equivalent in JSX for disabling a button



<input type=button disabled />;
<input type=button disabled={true} />;


// And these two are equivalent in JSX for not disabling a button



<input type=button />;
<input type=button disabled={false} />;






Example



JSX:



<div>
<Component autoHeight />
<AnotherComponent autoHeight={null} />
</div>


JS:



React.createElement(
div,
null,
React.createElement(Component, { autoHeight: true }),
React.createElement(AnotherComponent, { autoHeight: null })
);


Check the babel demo of this, here.






Solution



As ctrlplusb stated, if you want to pass an empty prop you can simply give it the value of null or even undefined.



So you could do:



<SomeComponent disableHeight={null}>
{({width}) => (
<AnotherComponent
autoHeight={null}
width={width}
height={300}
{...otherProps}
/>
)}
</SomeComponent>


Though I will note that passing it as undefined is probably entirely unnecessary because reading this.props.autoHeight from AnotherComponent will always give you undefined, regardless if you explicitly passed it as autoHeight={undefined} or not at all. Passing null is probably better in such cases since you are explicitly passing the prop by stating that it has the value of... no value (i.e null).


[#61766] Monday, June 13, 2016, 8 Years  [reply] [flag answer]
Only authorized users can answer the question. Please sign in first, or register a free account.
yasmeeng

Total Points: 516
Total Questions: 97
Total Answers: 101

Location: South Korea
Member since Fri, Sep 11, 2020
4 Years ago
;