我制作了 2 个按钮和 1 个输入框。按钮 (+/-) 用于递增和递减计数器。最初输入字段包含日期,即 data.available_slots[0].date
当我通过单击 + 按钮递增时,日期从 Wed, Dec 06
动态变化到 Thur, Dec07
到 Fri, Dec08
和以此类推到最后一个日期,即 Wed, Dec13
。
JSONdata 的长度是 7 即 data.available_slots[0].date
到 data.available_slots[6].date
所以当计数器达到 6 时它不应该进一步增加,如果计数器减少,那么它不应该低于 0。
但是现在当计数器(索引)超出界限时它会显示错误(见屏幕截图)
查看各种屏幕截图,点击按钮在输入字段中显示各种日期 https://imgur.com/a/aek4e
日期选择器.js:
import React, { Component } from 'react';
import data from './data';
import './datepicker.css';
class DatePicker extends Component {
constructor(props){
super(props);
this.state = {
counter:0
};
}
increment(){
this.setState({
counter: this.state.counter + 1
});
}
decrement(){
if(this.state.counter > 0){
this.setState(prevState => ({counter: prevState.counter-1}))
}
}
render() {
return (
<div>
<div id="center">
<label for="name">Pick a Date </label>
<p></p>
<button type="button" className="btn btn-success" id="plus" onClick={this.increment.bind(this)}>+</button>
<input type="text" id="date" value={data.available_slots[this.state.counter].date}/>
<button type="button" className="btn btn-danger" id="minus" onClick={this.decrement.bind(this)}>-</button>
</div>
</div>
);
}
}
export default DatePicker;
数据.js:
const data = {
"template_type": "slot_picker",
"selection_color": "#000000",
"secondary_color": "#808080",
"title": "Available Slots for Dr. Sumit",
"available_slots": [
{
"date": "Wed, Dec 06",
"date_slots": [
]
},
{
"date": "Thu, Dec 07",
"date_slots": [
]
},
{
"date": "Fri, Dec 08",
"date_slots": [
]
},
{
"date": "Sat, Dec 09",
"date_slots": [
]
},
{
"date": "Today",
"date_slots": [
{
"hour": "8",
"hour_slots": [
{
"08:10 AM": "slotId001"
},
{
"08:50 AM": "slotId005"
}
]
},
{
"hour": "3",
"hour_slots": [
{
"03:00 PM": "slotId005"
},
{
"03:30 PM": "slotId007"
}
]
}
]
},
{
"date": "Tomorrow",
"date_slots": [
]
},
{
"date": "Wed, Dec 13",
"date_slots": [
{
"hour": "4",
"hour_slots": [
{
"04:30 PM": "slotId105"
},
{
"04:50 PM": "slotId106"
}
]
},
{
"hour": "5",
"hour_slots": [
{
"05:30 PM": "slotId202"
},
{
"05:45 PM": "slotId208"
}
]
}
]
}
]
};
export default data;
最佳答案
在递增它的值之前检查计数器值。像这样:
increment(){
if(this.state.counter < 6)
this.setState({
counter: this.state.counter + 1
});
}
或者
increment(){
this.setState(prevState => ({
counter: prevState.counter < 6? (prevState.counter+1): prevState.counter
}));
}
关于javascript - 如何从 ReactJS 中的外部文件循环 JSON 数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48961720/