如何在Reactjs

时间:2016-05-06 12:06:44

标签: javascript dynamic reactjs webpack

enter image description here我是React的新手。我有一个场景,就像有一个带有四个选项的select语句。基于用户从下拉列表中选择一个选项,我需要在一行中创建一个动态输入字段,将它附加到包装元素。 我创建的动态字段对于四个选项中的每一个都是不同的。用户可以添加输入字段以及删除输入字段,如您在此处所见http://formvalidation.io/examples/adding-dynamic-field/

但是在上面我们可以添加和添加删除相同类型的输入字段。在我的情况下,动态字段将基于所选的选项。那么专家在那里plz指导我如何在Reactjs中实现此功能

1 个答案:

答案 0 :(得分:2)

总之,这可以通过在select元素上触发onchange事件来实现。它并不完全清楚你要求做什么,但我相信它与这种情况类似

class Form extends Component {
  constructor() {
    super()
    this.state = {
      options: []
    }
  }

  addOperation(e) {
    const selectedValue = this.refs.selection.value
    const currentOptions = this.state.options
    currentOptions.push(selectedValue);

    // append selected value to the state's options array on every change
    this.setState({ options: currentOptions })
  }

  renderRows() {
    // this is where you'll define each type of row
    this.state.options.map((option, index) => {
      if (option === "add") {
        return (
          <tr class="form-row" key={index}>
            <td>Adjust Price (Add)</td>
            <td>
              <label>
                Add
                <input type="text" placeholder={option} />
              </label>
                to
              <select>
                <option value="option1">option1</option>
                <option value="option2">option2</option>
                <option value="option3">option3</option>
              </select>
            </td>
            <td>
              <button>Remove</button>
            </td>
          </tr>
        )
      } else if (option === "multiply") {
        return (
          <tr class="form-row" key={index}>
            <td>Adjust Price (Multiply)</td>
            <td>
              <label>
                Multiply
                <input type="text" placeholder={option} />
              </label>
                to
              <select>
                <option value="option1">option1</option>
                <option value="option2">option2</option>
                <option value="option3">option3</option>
              </select>
            </td>
            <td>
              <button>Remove</button>
            </td>
          </tr>
        )
      } else if (option === "equals") {
        // return a different row here
      } else if (option === "not equals") {
        // return a different row here
      }
    })
  }

  render () {
    return (
      <form>
        <div className="appended-inputs">
          {renderRows.bind(this)}
        </div>
        <select name="select" id="select" ref="selection">
          <option value="add">Adjust Price (Add)</option>
          <option value="multiply">Adjust Price (Multiply)</option>
          <option value="equals">Filter Products (equals)</option>
          <option value="not equals">Filter Products (not equals)</option>
        </select>
        <button onClick={addOperation.bind(this)}>Add Operation</button>
      </form>
    )
  }
}

基本上,这里发生的是我们在组件状态下存储一组选项,最初是空的。现在,当用户选择某个内容并添加操作时,它会被添加到状态数组中。在renderRows函数中,您有一个if / if else链来决定要返回的行类型,或者您可以使用switch块。

现在,当用户在下拉列表中选择某些内容并单击添加操作时,会立即附加新的输入字段。