TypeError: this.props.onDelete is not a function
TypeError: this.props.onDelete is not a function
我正在使用 react.js 开发一个事件 crud 应用程序,我收到此错误:
TypeError: this.props.onDelete is not a function
这是用户界面:
这是我点击删除时的错误:
我也点击编辑时出现同样的错误。
这是代码:
import React, { Component } from "react";
class Event extends Component {
onDelete = () => {
// console.log('event ', this.props.event.id);
this.props.onDelete(this.props.id);
};
onEdit = () => {
// console.log('event ', this.props.event.id);
this.props.onEdit(this.props);
};
render() {
const { id, eventname, eventdescription } = this.props.event;
return (
<tr>
<td>{id}</td>
<td>{eventname}</td>
<td>{eventdescription}</td>
<td>
<button onClick={this.onEdit}>Edit</button>
<button onClick={this.onDelete}>Delete</button>
</td>
</tr>
);
}
}
export default Event;
这是 DisplayEvent.js 文件
import React, { Component } from 'react';
import Event from './Event';
import axios from 'axios';
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});
// });
.catch((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 ? (
<tr>
<td>
<h1>Loading events...</h1>
</td>
</tr>
) : (
events.map(event => {
return <Event key={event.id} event={event} onDelete={this.onDelete} onEdit={this.onEdit} />;
})
)}
</tbody>
</table>
</div>
);
}
}
export default DisplayEvent;
这可能是什么问题?
<Event key={event.id} event={event} onDelete={this.onDelete} onEdit={this.onEdit} />
DisplayEvent 组件中没有声明 onDelete
Event
组件正在 DisplayEvents
组件内部使用。
DisplayEvents
正在将道具 onDelete
传递给 Event
。
查看您的代码,
onDelete
prop 的值是 this.onDelete
,你没有在 DisplayEvents
中定义,这意味着,undefined 被传递给子组件(像这样:<Event onDelete={undefined} >
)。您可以通过在 Event
组件的 contructor
中安慰道具来检查这一点。
您需要在父级中定义您的函数,然后将其作为 prop 传递给子级。
你可以看看sanboxlink作为参考
我正在使用 react.js 开发一个事件 crud 应用程序,我收到此错误:
TypeError: this.props.onDelete is not a function
这是用户界面:
这是我点击删除时的错误:
我也点击编辑时出现同样的错误。
这是代码:
import React, { Component } from "react";
class Event extends Component {
onDelete = () => {
// console.log('event ', this.props.event.id);
this.props.onDelete(this.props.id);
};
onEdit = () => {
// console.log('event ', this.props.event.id);
this.props.onEdit(this.props);
};
render() {
const { id, eventname, eventdescription } = this.props.event;
return (
<tr>
<td>{id}</td>
<td>{eventname}</td>
<td>{eventdescription}</td>
<td>
<button onClick={this.onEdit}>Edit</button>
<button onClick={this.onDelete}>Delete</button>
</td>
</tr>
);
}
}
export default Event;
这是 DisplayEvent.js 文件
import React, { Component } from 'react';
import Event from './Event';
import axios from 'axios';
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});
// });
.catch((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 ? (
<tr>
<td>
<h1>Loading events...</h1>
</td>
</tr>
) : (
events.map(event => {
return <Event key={event.id} event={event} onDelete={this.onDelete} onEdit={this.onEdit} />;
})
)}
</tbody>
</table>
</div>
);
}
}
export default DisplayEvent;
这可能是什么问题?
<Event key={event.id} event={event} onDelete={this.onDelete} onEdit={this.onEdit} />
DisplayEvent 组件中没有声明 onDelete
Event
组件正在 DisplayEvents
组件内部使用。
DisplayEvents
正在将道具 onDelete
传递给 Event
。
查看您的代码,
onDelete
prop 的值是 this.onDelete
,你没有在 DisplayEvents
中定义,这意味着,undefined 被传递给子组件(像这样:<Event onDelete={undefined} >
)。您可以通过在 Event
组件的 contructor
中安慰道具来检查这一点。
您需要在父级中定义您的函数,然后将其作为 prop 传递给子级。
你可以看看sanboxlink作为参考