Привет. Я пытаюсь обновить компонент реагирования, который не работает. Когда пользователь нажимает кнопку на одном из компонентов, на мой API поступает запрос на публикацию. Целью этого компонента является создание списка этих событий по:
- Сначала запросите мой API для идентификаторов опубликованных событий
- Затем выполните цикл по идентификаторам событий и для каждого сделайте запрос на выборку для внешнего API, где информация о событиях всегда обновляется.
- Поскольку каждое событие запрашивается из внешнего API, результаты помещаются в пустой массив
- и, наконец, состояние устанавливается, когда в массив помещается новое событие.
Это работает, но когда новое событие сохраняется в моем API, этот компонент не будет повторно отображаться. Вот мой код, который не обновляется:
class EventList extends Component {
constructor(props){
super(props)
this.state = {
userEvents: []
}
}
//Create a function to load active user's saved events in api
loadEvents = () => {
const ActiveUser = JSON.parse(localStorage.getItem("ActiveUser"))
//Get active user's events from vetharbor.json
fetch(`http://localhost:8088/events?userId=${ActiveUser.id}`)
//convert get to json data
.then(r => r.json())
.then(allEvents => {
let events = []
//for each event tied to active user's id, loop thru and ...
allEvents.forEach(event => {
//make a fetch request to eventbrite with the event's id
fetch(`https://www.eventbriteapi.com/v3/events/${event.id}/?token=MY_API_Token`)
//convert response to json
.then(r => r.json())
//return the data???
.then(ue => {
events.push(ue)
// this.userEvents = events
this.setState({
userEvents: events
})
})
})
})
}
shouldComponentUpdate(nextProps, nextState){
if(this.state.userEvents !== nextState.userEvents){
return true
}
}
componentDidUpdate(){
this.loadEvents()
}
//run the function in a component did mount
componentDidMount(){
console.log("component did mount")
this.loadEvents()
}
render() {
return (
<div className="event-list">
<h3>These are events</h3>
{this.state.userEvents.map(ues => {
return <h1 key={ues.id}>{ues.name.text}</h1>
})}
</div>
);
}
}
export default EventList