我是React的新手。我有一个场景,就像有一个带有四个选项的select语句。基于用户从下拉列表中选择一个选项,我需要在一行中创建一个动态输入字段,将它附加到包装元素。 我创建的动态字段对于四个选项中的每一个都是不同的。用户可以添加输入字段以及删除输入字段,如您在此处所见http://formvalidation.io/examples/adding-dynamic-field/
但是在上面我们可以添加和添加删除相同类型的输入字段。在我的情况下,动态字段将基于所选的选项。那么专家在那里plz指导我如何在Reactjs中实现此功能
答案 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块。
现在,当用户在下拉列表中选择某些内容并单击添加操作时,会立即附加新的输入字段。