React HandleDelete 类型错误未定义
React HandleDelete TypeError undefined
我有名为网站的 React 组件来处理状态
class Websites extends React.Component {
constructor(props) {
super(props);
this.handleWebsiteDelete = this.handleWebsiteDelete.bind(this);
this.state = {
websites: this.props.websites
}
}
handleWebsiteDelete(id) {
console.log("delete")
// How to Run This Function?
// ...further code to delete id from state.websites
}
render () {
return(
<div className="row">
{
this.state.websites.map(function(website, index) {
return (
<WebsiteItem key={website.id} {...website} onDelete={this.handleWebsiteDelete}/>
)
})
}
</div>
);
}
}
然后我有一个名为 WebsiteItem 的 React 组件,它有一个函数 handleDelete an object:
class WebsiteItem extends React.Component {
handleDelete(e) {
e.preventDefault();
$.ajax({
method: "DELETE",
url: "/websites/" + this.props.id
})
.done(function(){
this.props.onDelete(this.props.id);
}.bind(this))
}
render() {
return (
<div className="card">
{this.props.name}
<a href="#" onClick={this.handleDelete.bind(this)}>Delete</a>
</div>
);
}
}
我的目标是使用 WebsiteItem 组件内的 ajax 从服务器删除网站(已成功完成)和 运行 Websites 组件内的函数 onDelete
来更新状态 this.state.websites
。
我无法 运行 函数并出现错误:Uncaught TypeError: this.props.onDelete is not a function
- 我尝试使用 bind(this) 但不确定我是否完全理解它。谢谢。
你几乎答对了。
您必须 bind
将传递给 this.state.websites.map()
的回调函数传递给您的组件实例。
为此,您必须将上下文作为第二个参数传递给 .map()
{
this.state.websites.map(function(website, index) {
return (
<WebsiteItem key={website.id} {...website} onDelete={this.handleWebsiteDelete}/>
)
},this)
}
或者使用箭头函数
{
this.state.websites.map((website, index) => {
return (
<WebsiteItem key={website.id} {...website} onDelete={this.handleWebsiteDelete}/>
)
})
}
我有名为网站的 React 组件来处理状态
class Websites extends React.Component {
constructor(props) {
super(props);
this.handleWebsiteDelete = this.handleWebsiteDelete.bind(this);
this.state = {
websites: this.props.websites
}
}
handleWebsiteDelete(id) {
console.log("delete")
// How to Run This Function?
// ...further code to delete id from state.websites
}
render () {
return(
<div className="row">
{
this.state.websites.map(function(website, index) {
return (
<WebsiteItem key={website.id} {...website} onDelete={this.handleWebsiteDelete}/>
)
})
}
</div>
);
}
}
然后我有一个名为 WebsiteItem 的 React 组件,它有一个函数 handleDelete an object:
class WebsiteItem extends React.Component {
handleDelete(e) {
e.preventDefault();
$.ajax({
method: "DELETE",
url: "/websites/" + this.props.id
})
.done(function(){
this.props.onDelete(this.props.id);
}.bind(this))
}
render() {
return (
<div className="card">
{this.props.name}
<a href="#" onClick={this.handleDelete.bind(this)}>Delete</a>
</div>
);
}
}
我的目标是使用 WebsiteItem 组件内的 ajax 从服务器删除网站(已成功完成)和 运行 Websites 组件内的函数 onDelete
来更新状态 this.state.websites
。
我无法 运行 函数并出现错误:Uncaught TypeError: this.props.onDelete is not a function
- 我尝试使用 bind(this) 但不确定我是否完全理解它。谢谢。
你几乎答对了。
您必须 bind
将传递给 this.state.websites.map()
的回调函数传递给您的组件实例。
为此,您必须将上下文作为第二个参数传递给 .map()
{
this.state.websites.map(function(website, index) {
return (
<WebsiteItem key={website.id} {...website} onDelete={this.handleWebsiteDelete}/>
)
},this)
}
或者使用箭头函数
{
this.state.websites.map((website, index) => {
return (
<WebsiteItem key={website.id} {...website} onDelete={this.handleWebsiteDelete}/>
)
})
}