具有多个参数的 React 函数
React function with multiple params
我在尝试使用调用 API 方法从数据库中删除所选项目的删除函数时遇到问题。
API 只接受页面 ID,所以我一直在尝试将 ID 发送到 api。
这是应用程序主容器中的函数。
deletePage(id) {
instance.put(`/admin/deletePage/${id}`).then((response) => {
this.getPages();
window.location.replace('/')
}).catch((error) => {
console.log(error)
})
}
然后我将此函数作为道具传递给 Dashboard 组件,我在其中创建另一个函数来处理删除:
handleDelete(e, id) {
e.preventDefault()
this.props.deletePage(id)
}
最后,我的渲染函数:
render() {
const pages = this.props.pages.map((page, i) => {
return (
<div key={i}>
<h2>{page.title}</h2>
<a href={`/admin/edit-page/${i}`}>Edit</a>
<button onClick={this.handleDelete(i)}>Delete</button>
</div>
)
});
return (
<div>
<h2>Dashboard</h2>
{pages}
</div>
);
}
目前我在控制台中收到此错误:e.preventDefault is not a function
如果我删除 preventDefault 行,它只会导致不断重新加载。
请帮忙。只是想删除东西 mwhaha
我认为这里有两个问题。
首先,this.handleDelete
参数的顺序应该颠倒过来:this.handleDelete(id, e)
。事件对象总是最后提供。
其次,onClick={this.handleDelete(i)}
应该是onClick={this.handleDelete.bind(this, i)}
。 onClick={this.handleDelete(i)}
将调用 this.handleDelete
的结果赋值给 onClick
。当您的意思是当用户单击按钮时调用该函数时,您在渲染阶段不小心调用了 this.handleClick
。
您应该使用高阶函数来执行此操作。它只是一个函数 return 另一个函数。
handleDelete(id) {
return (event)=> {
event.preventDefault()
this.props.deletePage(id)
}
}
然后像之前一样调用
<button onClick={this.handleDelete(i)}>Delete</button>
我在尝试使用调用 API 方法从数据库中删除所选项目的删除函数时遇到问题。
API 只接受页面 ID,所以我一直在尝试将 ID 发送到 api。
这是应用程序主容器中的函数。
deletePage(id) {
instance.put(`/admin/deletePage/${id}`).then((response) => {
this.getPages();
window.location.replace('/')
}).catch((error) => {
console.log(error)
})
}
然后我将此函数作为道具传递给 Dashboard 组件,我在其中创建另一个函数来处理删除:
handleDelete(e, id) {
e.preventDefault()
this.props.deletePage(id)
}
最后,我的渲染函数:
render() {
const pages = this.props.pages.map((page, i) => {
return (
<div key={i}>
<h2>{page.title}</h2>
<a href={`/admin/edit-page/${i}`}>Edit</a>
<button onClick={this.handleDelete(i)}>Delete</button>
</div>
)
});
return (
<div>
<h2>Dashboard</h2>
{pages}
</div>
);
}
目前我在控制台中收到此错误:e.preventDefault is not a function
如果我删除 preventDefault 行,它只会导致不断重新加载。
请帮忙。只是想删除东西 mwhaha
我认为这里有两个问题。
首先,this.handleDelete
参数的顺序应该颠倒过来:this.handleDelete(id, e)
。事件对象总是最后提供。
其次,onClick={this.handleDelete(i)}
应该是onClick={this.handleDelete.bind(this, i)}
。 onClick={this.handleDelete(i)}
将调用 this.handleDelete
的结果赋值给 onClick
。当您的意思是当用户单击按钮时调用该函数时,您在渲染阶段不小心调用了 this.handleClick
。
您应该使用高阶函数来执行此操作。它只是一个函数 return 另一个函数。
handleDelete(id) {
return (event)=> {
event.preventDefault()
this.props.deletePage(id)
}
}
然后像之前一样调用
<button onClick={this.handleDelete(i)}>Delete</button>