在React中,如何与返回更多JSX的JS函数一起返回JSX?

时间:2018-10-11 19:10:10

标签: javascript reactjs jsx

在一个React组件中,该组件呈现一个select字段,其中的选项由组件函数renderOptions()动态创建,我们如何将空的option元素(例如:<option value=""></option>)呈现为第一个选择?

在添加空的<option>

之前先执行代码
renderOptions() {
    return (
        this.props.users.map(user => (
            <option key={ user._id } value={ user._id }>{ user.name }</option>
        ))
    )
}


render() {
    return (
        <div>
            <div className="someDiv"></div>

            <select>
                { this.props.usersAreLoading 
                    ? <option value="">Loading...</option> 
                    : this.renderOptions()
                }            
            </select>
        </div>
    )
}

尝试失败

render() {
    return (
        <div>
            <div className="someDiv"></div>

            <select>
                { this.props.usersAreLoading 
                    ? <option value="">Loading...</option> 
                    : <option value=""></option> this.renderOptions()
                }            
            </select>
        </div>
    )
}

5 个答案:

答案 0 :(得分:0)

尝试一下

 <select>
        { this.props.usersAreLoading 
                && <option value="">Loading...</option> }
        {!this.props.usersAreLoading && <option value=""></option>} 
        {!this.props.usersAreLoading && this.renderOptions()}           
   </select>

答案 1 :(得分:0)

您必须单独渲染它:

{!this.props.usersAreLoading && <option value=""></option>}

{this.props.usersAreLoading 
  ? <option value="">Loading...</option> 
  : this.renderOptions()
} 

答案 2 :(得分:0)

最简单的方法(也许不是最优雅的方法)是使用两个条件

        <select>
            { this.props.usersAreLoading 
                ? <option value="">Loading...</option> 
                : <option value=""></option>
            } 
           {!this.props.usersAreLoading && this.renderOptions()
      } 

        </select>

答案 3 :(得分:0)

由于三元“ else”应包含多个元素,因此可以用React.Fragment包裹它们:

{this.props.usersAreLoading ? (
  <option value="">Loading...</option>
) : (
  <>
    <option value=""></option>
    {this.renderOptions()}
  </>
)}

或作为单个数组提供:

{this.props.usersAreLoading ? (
  <option value="">Loading...</option>
) : [
  <option value=""></option>,
  this.renderOptions()
]}

答案 4 :(得分:0)

使用片段包装选项组件

<select>
          {this.props.usersAreLoading ? (
            <option value="">Loading...</option>
          ) : (
            <Fragment>
                <option value=""/>
              {this.renderOptions()}
            </Fragment>
          )}
          )} }
 </select>