当前位置: 首页 > 知识库问答 >
问题:

已解决:axios在循环中重复一个请求,但我不想要这个| axios[duplicate]

翟冯浩
2023-03-14

我在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>
    )
}

}

共有2个答案

吕英豪
2023-03-14

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)

那么,如何修复它呢有很多解决方案,但最终它必须给出onClickisa函数的值类型

#我打赌没有人用这个,但我认为描述我的想法更有用。

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> 

}

赵明亮
2023-03-14

这是否工作:

<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.