Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Change the element wrapping its children based on a condition in JSX

I wasn't sure how to title this question, but I'm basically wondering if there's a cleaner way to do this:

var inputElement;
if(props.horizontal){
     inputElement = <div className="col-sm-10">
        {props.children}
        {help}
    </div>
} else {
    inputElement = <span className="col-sm-10">
        {props.children}
        {help}
    </span>
}

Based on whether props.vertical is true, I'm wrapping {props.children} and {help} in a span or a div. Is there a clean way to do this without repeating {props.children}{help} twice? Is there a way to put the type of element I want in a variable, and then use that in jsx to wrap these?

like image 224
bigblind Avatar asked Oct 17 '25 03:10

bigblind


1 Answers

React Elements can be constructed either from a Component, or a string representing an HTML tag.

That means, an approach like the the following works perfectly fine:

const App = (props) => {
  const wrapper = props.horizontal ? 'div' : 'span'
  return <wrapper className="col-sm-10">Content</wrapper>
}

ReactDOM.render(
  <App horizontal={true} />,
  document.getElementById('app')
)
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react-dom.min.js"></script>

<div id='app'></div>
like image 86
TimoStaudinger Avatar answered Oct 18 '25 18:10

TimoStaudinger



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!