3 回答

TA贡献1893条经验 获得超10个赞
您应该使用state
而不是props
因为您将 API 响应设置为state
render() { const { events } = this.state; ...

TA贡献1836条经验 获得超3个赞
在状态上设置
events
为空数组从 state 而不是 props 中读取事件:
(可选)使用
loading
state 显示加载器并确定何时获取数据。
class DisplayEvent extends Component {
constructor(props) {
super(props);
this.state = { value: '', loading: true, events: [] }; // use array here
}
componentDidMount() {
this.setState({ loading: true });
axios
.get('http://127.0.0.1:8000/api/events')
.then(response => {
this.setState({ events: response.data, loading: false });
})
.catch(function(error) {
console.log(error);
this.setState({loading: false});
});
}
render() {
const { events, loading } = this.state; // get events from the state
return (
<div>
<h1>Events</h1>
<table className="table table-hover">
<thead>
<tr>
<td>ID</td>
<td>Event Name</td>
<td>Event Description</td>
<td width="200px">Actions</td>
</tr>
</thead>
<tbody>
{loading ? (
<p>Loading events...</p>
) : (
events.map(event => {
return <Event key={event.id} event={event} onDelete={this.onDelete} onEdit={this.onEdit} />;
})
)}
</tbody>
</table>
</div>
);
}
}

TA贡献1851条经验 获得超5个赞
events如果 API 返回的数据是,则设置一个空数组undefined。现在您还没有添加条件来处理这种情况。如果您undefined从响应中获得一个不是数组的值,这就是它显示此错误的原因。
this.setState({ events: response.data || [] });
componentDidMount() {
axios.get('http://127.0.0.1:8000/api/events')
.then(response => {
this.setState({ events: response.data || [] });
})
.catch(function (error) {
console.log(error);
})
};
更新
const events = this.props.events || [];
添加回答
举报