我正在使用 react-native-calendar 中的议程组件。
当我在给定日期有很多预订时,我在该日期之前按了一个日期,议程滚动到错误的预订。
给定:
export default class AgendaScreen extends Component {
constructor(props: any) {
super(props);
this.state = {
items: {}
};
}
render() {
return (
<Agenda
items={this.state.items}
loadItemsForMonth={this.loadItems.bind(this)}
selected={'2017-05-16'}
renderItem={this.renderItem.bind(this)}
renderEmptyDate={this.renderEmptyDate.bind(this)}
rowHasChanged={this.rowHasChanged.bind(this)}
/>
);
}
loadItems(day) {
setTimeout(() => {
for (let i = -15; i < 85; i++) {
const time = day.timestamp + i * 24 * 60 * 60 * 1000;
const strTime = this.timeToString(time);
if (!this.state.items[strTime]) {
this.state.items[strTime] = [];
const numItems = 30;
for (let j = 0; j < numItems; j++) {
this.state.items[strTime].push({
name: 'Item for ' + strTime + ' #' + j,
height: Math.max(50, Math.floor(Math.random() * 150))
});
}
}
}
const newItems = {};
Object.keys(this.state.items).forEach(key => {
newItems[key] = this.state.items[key];
});
this.setState({
items: newItems
});
}, 1000);
}
renderItem(item) {
return (
<TouchableOpacity
style={[styles.item, {height: item.height}]}
onPress={() => Alert.alert(item.name)}
>
<Text>{item.name}</Text>
</TouchableOpacity>
);
}
renderEmptyDate() {
return (
<View style={styles.emptyDate}>
<Text>This is empty date!</Text>
</View>
);
}
rowHasChanged(r1, r2) {
return r1.name !== r2.name;
}
timeToString(time) {
const date = new Date(time);
return date.toISOString().split('T')[0];
}
}
在这里,我们每天有 30 件商品。如果在初始日期前第二天按下,它将停留在初始最后提交的预订结束时。
有什么办法可以解决这个问题吗?