總之,可以通過觸發一個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來決定返回哪一行,或者你可以使用一個開關塊。
因此,現在當用戶在下拉列表中選擇某些內容並單擊添加操作時,會立即追加一個新的輸入字段。
非常感謝你的真棒建議。但我有一個問題,如我添加一行輸入字段,因爲你可以看到圖像不只是一個輸入字段。如果你指導我如何實現這一點,它會是偉大的 – yasar
這將以非常相似的方式實現,每個選項都具有「價值」屬性。將它分配給相應的值,如'not equals','equal's','multiply'或'add',並且在映射函數中,可以有一系列if語句或一個switch語句返回不同的行,具體取決於所選選項的值。我會稍微修改我的答案以澄清 – jmancherje
感謝您的建議 – yasar