[英]How to use a state value with map function to display repeat ui in react component
I have a react
component that I have a state
value that I want to use in a .map
function in order to show repeat ui.我有一个
react
组件,我有一个state
值,我想在.map
函数中使用它以显示重复的 ui。
class ReviewerRequirements extends Component {
state = {
reviewPositions: 2
}
showSkillsModalUI = () => {
const { reviewPositions } = this.state;
var skills = reviewPositions; // user defined length
for(var i = 0; i < skills.length; i++) {
return <li>Value</li>[i];
}
}
Problem : you want to repeat the UI based on value in reviewPositions
问题:您想根据reviewPositions 中的值重复 UI
map
can be used on a array, but what you have is a number, i would suggest you converting this into a array and using the same for map
. map
可以在数组上使用,但是您拥有的是一个数字,我建议您将其转换为数组并使用相同的map
。
var data = [];
var length = reviewPositions; // user defined length
for(var i = 0; i < length; i++) {
data.push('undefined');
}
const lis = data.map((position, index) => {
return (
<li key={index}>
<div className="two wide column">
<p>Role</p>
</div>
<div className="two wide column">
<p># of days required</p>
</div>
<div className="two wide column">
<p>From Date</p>
</div>
<div className="two wide column">
<p>To Date</p>
</div>
<div className="two wide column">
<p>Language Skills</p>
</div>
<div className="four wide column">
<p>Content Area Skills</p>
</div>
<div className="two wide column">
<p>Other Skills</p>
</div>
</li>
);
});
render(){
return <ul className="ui grid">
{lis}
</ul>
}
try this尝试这个
//this below code generate the n number of array based on your reviewPositions
Array.from(new Array(reviewPositions),(val,index)=>index+1)
//if reviewPositions = 2
//result [1,2]
class ReviewerRequirements extends Component { state = { reviewPositions: 2 } showSkillsModalUI = () => { const { reviewPositions } = this.state; Array.from(new Array(reviewPositions),(val,index)=>index+1) .map((position, index) => { return ( <ul className="ui grid"> <li key={index}> <div className="two wide column"> <p>Role</p> </div> <div className="two wide column"> <p># of days required</p> </div> <div className="two wide column"> <p>From Date</p> </div> <div className="two wide column"> <p>To Date</p> </div> <div className="two wide column"> <p>Language Skills</p> </div> <div className="four wide column"> <p>Content Area Skills</p> </div> <div className="two wide column"> <p>Other Skills</p> </div> </li> </ul> ); }); }; }
You can create an array based on the number in your state and return it.您可以根据您所在州的数字创建一个数组并返回它。 Then you can use that result anywhere in your app.
然后你可以在你的应用程序的任何地方使用这个结果。
class ReviewerRequirements extends React.Component { state = { reviewPositions: 2 } showSkillsModalUI = () => { const { reviewPositions } = this.state; const list = []; for (let i = 0; i < reviewPositions; i = i + 1) { list.push( // Find a good key instead of using the iterator here. <li key={i}>Value</li> ) } return list; }; render() { return ( <div> Some other thing here. {this.showSkillsModalUI()} </div> ) } } ReactDOM.render(<ReviewerRequirements />, document.getElementById("root"));
<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> <div id="root" />
Here is what I did这是我所做的
showSkillsModalCategoryUI = () => { const { reviewPositions, noOfDays, options, startDate, endDate, } = this.state; var data = []; var length = reviewPositions; // user defined length for (var i = 0; i < length; i++) { data.push('undefined'); } const row = data.map((position, index) => { return ( <div key={index}> <List.Item> <div className="ui grid"> <div className="two wide column"> <p>Role</p> </div> <div className="two wide column"> <Dropdown options={options} placeholder="# of Days" search selection fluid allowAdditions value={noOfDays} onAddItem={this.handleNumberOfDaysAddition} onChange={this.handleNumberOfDaysChange} /> </div> <div className="two wide column"> <Form.Field name="startDate" label={'Start Date'} control={DatePicker} placeholder="Please select start Date" isClearable={true} selected={startDate && startDate} selectsStart minDate={moment()} startDate={startDate && startDate} onChange={this.handleStartDateChange} /> </div> <div className="two wide column"> <Form.Field name="endDate" label={'End Date'} control={DatePicker} placeholder="Please select end date" isClearable={true} selected={endDate && endDate} selectsEnd startDate={startDate && startDate} minDate={startDate && startDate} endDate={endDate} onChange={this.handleEndDateChange} /> </div> <div className="two wide column"> <p>Language Skills</p> </div> <div className="four wide column"> <p>Content Area Skills</p> </div> <div className="two wide column"> <p>Other Skills</p> </div> </div> </List.Item> </div> ); }); return row; };
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.