根据JSX中的条件更改包装其子元素的元素

时间:2016-11-16 21:06:18

标签: javascript reactjs jsx

我不确定如何标题这个问题,但我基本上想知道是否有更清洁的方法来做到这一点:

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>
}

根据props.vertical是否为true,我在一个范围或一个div中包裹{props.children}{help}。有没有一种干净的方法可以做到这一点而不重复{props.children}{help}两次?有没有办法将我想要的元素类型放在变量中,然后在jsx中使用它来包装它们?

1 个答案:

答案 0 :(得分:2)

可以构建React Elements either from a Component, or a string representing an HTML tag

这意味着,像下面这样的方法非常合适:

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>