【发布时间】:2020-03-14 04:44:09
【问题描述】:
我的 React 类 EventTable 有几种模式,根据模式,它从服务器获取不同的数据并将它们显示到 <Table>。我首先让类显示静态数据,它工作得很好,包括通过来自更高组件的 prop 切换 mods。但后来我从 fetch 切换到动态数据(updateData() 中的ApiHelper 函数),现在我遇到了问题。
我无法找出正确的 shouldComponentUpdate 函数。在当前状态下,类在获取完成之前呈现,因此在初始模式下,它不显示任何内容,当模式更改时,它会显示上一次获取的数据。
例如,我尝试将旧数据与 shouldComponentUpdate 中的新数据进行比较,或者仅在 eventsLoaded 为真时更新并在获取之前将其设为假,但随后它打破了方式,组件无限更新,这有时会导致在更改模式时闪烁和在服务器流量垃圾邮件中。
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
}
}
【问题讨论】:
标签: javascript reactjs fetch-api