嗨,我试图更新一个反应组件,这是不工作的。当用户单击同级组件上的按钮时,将向my发出post请求。此组件的目的是通过以下方法创建这些事件的列表:
这是可行的,但是当一个新事件被保存到我的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
发布于 2018-06-23 11:25:50
这里,
shouldComponentUpdate(nextProps, nextState){
if(this.state.userEvents === nextState.userEvents){
return true
}
}
在您的示例中,shouldComponentUpdate不返回true,因为旧的userEvents和新的userEvents不同,逻辑也不正确。尝试将其更改为:
if(!(this.state.userEvents).equals(nextState.userEvents)){
return true
}
发布于 2018-06-24 16:16:49
现在我意识到我的逻辑中有一个错误,因此我修改了上面的代码如下,它现在更新我的代码(用一个无限循环,但它确实更新)
发自:
shouldComponentUpdate(nextProps,nextState){ if(this.state.userEvents === nextState.userEvents){返回真}
至:
shouldComponentUpdate(nextProps,nextState){ if(this.state.userEvents !== nextState.userEvents){返回真}
发布于 2018-07-02 20:37:54
无限循环是由componentDidUpdate再次获取数据引起的,setState导致再次调用componentDidUpdate,后者再次加载再次调用setState的数据。删除componentDidUpdate或添加条件逻辑,如果您真的需要它(您几乎从来没有这样做),应该修复它。
https://stackoverflow.com/questions/51004294
复制