在React JS中的组件的返回语句中循环

Atu*_*tul 2 reactjs

我试图在组件文件中显示年份选择框,我尝试了简单的for循环,但是它的语法错误,这是我的代码>

render(){

    return (
            <div>
                <select value={this.state.exp_year} name="exp_year" className="form-control" onChange={this.handleInputChange} >
                    <option value="">===Select Expiry Year===</option>
                    { for(var i=2017; i<=2050; i++){
                        <option value={i}>{i}</option>
                        }
                    }
                </select>
            </div>                  

        );
}   
Run Code Online (Sandbox Code Playgroud)

请让我知道我在做什么错。

dor*_*ork 6

基本上,您无法在JSX中执行直接循环,因为这有点像要求一个函数参数。但是,您可以做的是在其中放置IIFE,该IIFE返回一系列选项,例如:

render() {
  return (
    <div>
      <select
        value={this.state.exp_year}
        name="exp_year"
        className="form-control"
        onChange="this.handleInputChange">
        <option value="">===Select Expiry Year===</option>
        {(() => {
          const options = [];

          for (let i = 2017; i <= 2050; i++) {
            options.push(<option value={i}>{i}</option>);
          }

          return options;
        })()}
      </select>
    </div>
  );
}
Run Code Online (Sandbox Code Playgroud)

但这确实看起来很凌乱,所以您可能应该在返回之前将循环移到外面:

render() {
  const options = [];

  for (let i = 2017; i <= 2050; i++) {
    options.push(<option value={i}>{i}</option>);
  }

  return (
    <div>
      <select
        value={this.state.exp_year}
        name="exp_year"
        className="form-control"
        onChange="this.handleInputChange">
        <option value="">===Select Expiry Year===</option>
        {options}
      </select>
    </div>
  );
}
Run Code Online (Sandbox Code Playgroud)


AKX*_*AKX 5

Build the options into an array first, then use the array in the JSX code.

class YearComponent {
  render() {
    const options = [];
    for (var i = 2017; i <= 2050; i++) {
      options.push(<option value={i} key={i}>{i}</option>);
    }
    return (
      <div>
        <select
          value={this.state.exp_year}
          name="exp_year"
          className="form-control"
          onChange={this.handleInputChange}
        >
          <option value="">===Select Expiry Year===</option>
          {options}
        </select>
      </div>
    );
  }
}
Run Code Online (Sandbox Code Playgroud)