我的React类EventTable具有几种模式,并且根据该模式,它从服务器获取不同的数据并将其显示在<Table>
中。我首先让类显示静态数据,并且效果很好,包括通过prop从更高的组件切换mod。但是后来我从获取(ApiHelper
中的updateData()
函数)切换到动态数据,现在遇到了问题。
我找不到正确的shouldComponentUpdate
函数。在当前状态下,该类在获取之前完成渲染,因此在初始模式下,该类不显示任何内容,而在模式更改时,该类将显示上一次获取的数据。
例如,我尝试将shouldComponentUpdate
中的旧数据与新数据进行比较,或者仅在eventsLoaded
为true时才进行更新,并在获取之前将其设置为false,但是这样就破坏了组件的更新方式无限,有时在更改模式时会闪烁,并导致服务器流量垃圾邮件。
class EventTable extends React.Component {
constructor(props)
{
super(props);
this.state = {
eventsLoaded: false,data: undefined
};
}
componentDidmount() {
this.updateData();
}
componentDidUpdate() {
this.updateData();
}
shouldComponentUpdate(nextProps,nextStates) {
return this.props.mode !== nextProps.mode;
}
updateData() {
if(this.props.mode === 0)
ApiHelper.getallEvents().then((result) => this.setState({data: result,eventsLoaded: true}));
else if(this.props.mode === 1)
ApiHelper.getMemberEvents(this.props.userToken).then((result) => this.setState({data: result,eventsLoaded: true}));
else
ApiHelper.getPastEvents().then((result) => this.setState({data: result,eventsLoaded: true}));
}
render() {
//rendering a <Table> using this.state.data
}
}