我在react中编写了一个页面,它与我使用express编写的一个小API代码交互,我在单击它时创建了一个按钮,它删除了一条消息,但当我不单击时,该函数仍在执行。。。我的代码:
delete(id){
for (let i = 0; i<1; i++) {
axios.delete(`http://localhost:8080/messages/${id}`)
.then(res => {
console.log(res);
console.log(res.data);
})
}
}
render() {
return (
<div>
<ul>
{<button type="submit" onClick={this.delete(messageId)}>suprimmer</button></li>}
</ul>
</div>
)
}
}
onClick
接收值作为其函数,当用户“单击”它时触发/调用/运行。但是在您的代码中,您触发/调用/运行函数
。delete()
在编译阶段(编译器读取按钮onClick={this.delete(id)}
因此,结果是:
每次加载组件时,它都会立即调用delete。现在,onClick
值是未定义的
,这使得onClick
无法按预期工作
关于更多细节,我将在下面给出一个例子:
const DeleteButton =({id})=> {
const delete = (id)=> {
return api.deleteItem(id)
}
return <Button onClick={delete(id)}>Delete Button</button>
}
因此,当我使用上述组件时:
<Container>
<Content value={item}/>
<DeleteButton id={item.id}/>
</Container>
它将自动删除您加载的项目,因为在渲染
DeleteButton
时,它已经调用了delete(id)
。
那么,如何修复它呢有很多解决方案,但最终它必须给出
onClick
isa函数的值类型
:
#我打赌没有人用这个,但我认为描述我的想法更有用。
const DeleteButton =({id})=> {
const delete = (id)=> {
return function() {
api.deleteItem(id)
}
}
//delete(id) called and it returns an anonymous function that receive `id` and called it when onClick trigger
return <Button onClick={delete(id)}>Delete Button</button>
}
#2
const DeleteButton =({id})=> {
const delete = (id)=> {
return api.deleteItem(id)
}
return <Button onClick={(id)=>delete(item.id)}>Delete Button</button>
//or use bind : bind is return a function that wrapped parameter into
return <Button onClick={delete.bind(id)}>Delete Button</button>
}
这是否工作:
<button type="submit" onClick={() => this.delete(messageId)}>suprimmer</button>
当你像在你的版本中那样做的时候,你实际上是在调用这个函数。
出身背景 我将React Native中内置的应用程序连接到REST API。我通过Axios处理请求,并使用Redux存储查询结果。我有一个api连接的index.js文件,它保存了作为请求处理程序的函数,这些请求需要越来越深的授权级别。我有一个简单的函数返回访问令牌,这是由以下代码触发,当前位于应用程序的“欢迎页面”。 理想情况下,在浏览几个屏幕后,用户将进入主页并触发以下代码: 到目前为止,
问题内容: 我需要链接来自Google Maps API的一些API请求,而我正在尝试使用Axios来实现。 这是第一个请求,它在componentWillMount()中 这是第二个请求: 然后,我们有第三个请求,这取决于前两个请求是否完成: 如何链接这三个电话,以便第三个电话发生在前两个电话之后? 问题答案: 首先,不确定是否要在其中执行此操作,最好将其插入并具有一些默认状态,这些状态一旦完成
我该怎么解决呢? 第二次我什么都写不出来。
我试图用Axios向一个需要API密钥作为头的API发出get请求,但我不确定我做错了什么。控制台中有两个错误。1:xhr。js:178个选项https://api.propublica.org/congress/v1403(禁止)。2:加载失败https://api.propublica.org/congress/v1:对飞行前请求的响应未通过访问控制检查:请求的资源上不存在“access co
问题内容: 在我的一个类中,一种方法执行AJAX请求。在请求的回调函数中,我需要使用调用对象的另一个方法。但是在这种情况下并没有引用我的对象,所以我不知道该怎么做。 为了澄清,请考虑以下代码: 问题答案: 您可以定义一个变量存储在闭包中: 或使用$ .proxy: 或者,如果您不做任何事情,只需要调用回调: 在现代浏览器中,您也可以使用bind。当我不必与IE8兼容时,我可以
问题内容: 因此,我一直将以下代码放入我的React JS组件中,而我基本上是试图将两个API调用都置于一种称为的状态,但是以下代码却出现了错误: 现在,我猜我无法像我一样添加两个数据源,但是还可以怎么做呢?我只希望将来自该API请求的所有数据置于一种状态。 这是我目前收到的错误: 谢谢 问题答案: 您不能将数组“添加”在一起。使用array.concat函数(https://developer.