使用 Props React 填充下拉列表 Select

Populate Dropdown Select with Props React

所以我正在尝试使用 props 使用来自另一个 table 的一些信息填充下拉列表。目前有这个。我不得不向后做循环,因为早些时候它坏了,

import React, { Component, PropTypes } from 'react';
import {
  Button,
  ControlLabel,
  FormGroup,
  Form,
  FormControl
} from 'react-bootstrap';

class UserForm extends Component {

  constructor(props) {
    super(props);
  }

  createPosItems() {
    const posItems = [];
    console.log('heyyyy', this.props);
    for (let i = this.props.position.length; i > this.props.position.length; i--) {
      posItems.push(<option key={i} value={this.props.position.i}>{this.props.position.position_name}</option>);
    }
    return posItems;
  }

  createTeamItems() {
    const teamItems = [];
    console.log('whyyyyy', this.props);
    for (let i = this.props.team.length; i > this.props.team.length; i--) {
      teamItems.push(<option key={i} value={this.props.team.i}>{this.props.team.team_name}</option>);
    }
    return teamItems;
  }

  render() {
    return (
      <div className="row">
        <div className="col-lg-12">
          <Form>
            <FormGroup controlId="employeeFirstName">
              <ControlLabel>First Name</ControlLabel>
              <FormControl
                type="text"
                name="firstName"
                required=""
                value={this.props.user.firstName}
                onChange={this.props.onChange}
              />
            </FormGroup>
            <FormGroup controlId="empEmail">
              <ControlLabel>Email</ControlLabel>
              <FormControl
                type="email"
                name="email"
                required=""
                value={this.props.user.email}
                onChange={this.props.onChange}
              />
            </FormGroup>
            <FormGroup controlId="position">
              <ControlLabel>Job Position</ControlLabel>
              <FormControl
                componentClass="select"
              >
                <option value="">Select a Position</option>
                {this.createPosItems()}
              </FormControl>
            </FormGroup>
            <FormGroup controlId="Team">
              <ControlLabel>Team</ControlLabel>
              <FormControl
                componentClass="select"
              >
                <option value="">Select a Team</option>
                {this.createTeamItems()}
              </FormControl>
            </FormGroup>
            <FormGroup>
              <Button
                pullRight
                type="submit"
                className="btn btn-success"
                disabled={this.props.saving}
                onClick={this.props.onSave}
              >Save</Button>

              <Button
                pullRight
                type="submit"
                className="btn btn-danger pull-right"
                // onClick={this.props.onDelete}
              >Delete</Button>
            </FormGroup>
          </Form>
        </div>
      </div>
    );
  }
}

UserForm.propTypes = {
  user: React.PropTypes.object.isRequired,
  team: React.PropTypes.array.isRequired,
  position: React.PropTypes.array.isRequired,
  onSave: React.PropTypes.func.isRequired,
  onChange: React.PropTypes.func.isRequired,
  saving: React.PropTypes.bool
};

export default UserForm;

表单是另一个页面的子页面。每个其他字段都有效,期待下拉列表,元素显示,但不填充下拉列表。已经尝试使用多人的示例,但仍然无法达到 运行。 提前致谢!

据我所知,您的 for 循环导致了问题。假设 this.props.team.length 等于 10。然后你的循环看起来像这样:

for (let i = 10; i > 10; i--) { ... }

永远不会执行此 for 循环中的这段代码,因为条件错误。基本上它说,从 i = 10 开始,当 i 大于 10 时执行代码,然后从 i.

中减去 1

但问题是 10 不大于 10,因此循环永远不会执行。如果我使用 i 变量表示,i 永远不会大于 i.

这是应该工作的更新循环:

for (let i = this.props.team.length - 1; i >= 0; i--) { ... }

使用此循环,您可以呈现从末尾(this.props.team 数组的最后一个索引)到索引 0 的选项。

如果你想从头开始,你会写这个for循环:

for (let i = 0; i < this.props.team.length; i++) { ... }

我还建议您使用 Array.prototype.map 并只编写一个函数来填充选项,无需重复。使用这种方法,不需要存储 <option>s 的数组。你可以这样写函数:

populateOptions(options) {
  return options.map((option, index) => (
    <option key={index} value={option}>{option}</option>
  ));
}

然后您将以这种方式调用此函数:

this.populateOptions(this.props.team)

this.populateOptions(this.props.position)

HereArray.prototype.map 函数的文档。

你只需像这样从 props 创建一个变量:

const {organizations} = this.props;

然后使用它在 render() 方法中填充下拉列表,如下所示:

<DropdownButton title="Organization" className="m-b m-t" id="dropdown-organization">
                    {organizations.map((organization, i) =>
    <MenuItem key={i}>{organization.name}</MenuItem>)}
</DropdownButton>

onClick 处理程序可以通过道具以同样的方式传递下去。