[英]loop through component based on number in select list - react js
In my App component, I have a component which returns a select list with 15 option with the numbers 1 to 15. I also have an onChange on the select list which stores the selected number in the App state.在我的 App 组件中,我有一个组件返回一个 select 列表,其中包含 15 个选项,数字为 1 到 15。我在 select 列表上还有一个 onChange,它将所选数字存储在 App Z9ED39E2EA93158EF573ZE 中。
My goal is that when the user selects a number from the select list It'll loop through that number and output a new component that just returns a text input (for example if 9 is chosen, automatically you see 9 input fields).我的目标是,当用户从 select 列表中选择一个数字时,它将遍历该数字和 output 一个仅返回文本输入的新组件(例如,如果选择 9,您会自动看到 9 个输入字段)。 Eventually, the value from each text input will be saved into an array in the App state.
最终,来自每个文本输入的值将保存到应用程序 state 中的数组中。
My App.js我的 App.js
render() {
return (
<div className="App">
<form onSubmit={this.handleSubmit}>
<Location change={this.changeLocation} value={this.state.location} />
<Date changeDate={this.handleDate} value={this.state.date} />
<NumOfTunes
handleChange={this.handleNumOfTunes}
value={this.state.numberOfTunes}
/>
<button type="submit">Generate SetList</button>
<button type="button" onClick={this.handleReset}>
Reset
</button>
</form>
</div>
);
My select list component我的 select 列表组件
const numOfTunes = props => {
return (
<div>
<select onChange={props.handleChange}>
<option>1</option>
<option>2</option>
<option>3</option>
<option>4</option>
<option>5</option>
<option>6</option>
<option>7</option>
<option>8</option>
<option>9</option>
<option>10</option>
<option>11</option>
<option>12</option>
<option>13</option>
<option>14</option>
<option>15</option>
</select>
</div>
const returnInputs (){
for(let i=0; i< selectedNumber; i++){
return <input key={i} value={this.state.inputValues[i]} onChange={this.addInputsToList}/>
}
}
const addInputsToList (e) {
setState({
inputValues: [...this.state.inputValues, e.target.value]
})
}
render(){
....
{this.renderInputs()}
...
}
You could store an inputCount
in your state (updated when onChange
is fired) and use that value to create your input list component:您可以在 state 中存储一个
inputCount
(在触发onChange
时更新)并使用该值来创建您的输入列表组件:
class Button extends React.Component { constructor(props) { super(props); this.state = { inputCount: 0 }; this.onSelectChange = this.onSelectChange.bind(this); } render() { return ( <div style={containerStyles}> <select onChange={this.onSelectChange}> <option>1</option> <option>2</option> <option>3</option> </select> {this.state.inputCount > 0 && <div style={inputContainer}> {[...Array(Number(this.state.inputCount)).keys() ].map(el => <input value="" /> )} </div> } </div> ); } onSelectChange(e) { this.setState( ({ inputCount: e.target.value }) ); } } const containerStyles = { display: "block", justifyContent: "center", flexWrap: "wrap" }; const inputContainer = { display: "flex", padding: '1rem', flexDirection: "column", fontSize: "30px", color: "#eec200" }; ReactDOM.render( <Button />, document.body );
<div id="react"></div> <script src="https://cdnjs.cloudflare.com/ajax/libs/react/16.6.3/umd/react.production.min.js"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/react-dom/16.6.3/umd/react-dom.production.min.js"></script>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.