我正在与React一起实现一个表内按钮,该按钮运行http请求以决定是否禁用,例如:

<Table>
  <tbody>
    <tr>
      <td>something1</td>
      <td>something2</td>
      <td>something3</td>
      <Button onClick = {() => DoSomething()} disabled= 
      {Boolean(HTTPRequest(payload))}>
        Click me!
      </Button>
    </tr>
  </tbody>
</Table>

function HTTPRequest(payload) {
  const {loading, error, data} = axios.get(API)
  return data.length > 0
}

然而,我注意到这不起作用,因为函数是在收到实际结果之前完成的.我认为它与异步有关,所以我将其更改为:

async function HTTPRequest(payload) {
  const {loading, error, data} = await axios.get(API)
  return data.length > 0
}

但它仍然不起作用.如果您有任何建议,我们将不胜感激,谢谢!

推荐答案

我认为应该使用状态和效果.

const [bool, setBool] = useState(initialBoolStateWanted);
useEffect(()=>{
  (async()=>{
    let data = await axios.get(API)
    setBool(data.length > 0)
  })()
},[])

return(
  <Button onClick = {() => DoSomething()} disabled={bool}>
    Click me!
  </Button>
)

编辑:添加到注释的解决方案

如果你需要提出几个请求

const [bools, setBools] = useState([initialBoolStateWanted]);
useEffect(()=>{
  (async()=>{
    let datas = await Promise.all(
      //For each button give different props to the request
      bools.map((elem, index) => axios.get(API(index))
    )
    setBools(datas.map(elem => elem.length > 0))
  })()
},[])

return(
  <Button onClick = {() => DoSomething()} disabled={bool}>
    Click me!
  </Button>
)

如果您可以在返回数组的单个请求中执行此操作

const [bools, setBools] = useState([initialBoolStateWanted]);
useEffect(()=>{
    (async()=>{
      let datas = await axios.get(API)
      setBools(datas.map(elem => elem.length > 0))
    })()
},[])

return(
  <Button onClick = {() => DoSomething()} disabled={bool}>
    Click me!
  </Button>
)

或者制作一个处理自身状态的按钮组件

Javascript相关问答推荐

如何将特定的字符串类型转换为TypScript中的字符串?

将音频记录从js发送到activx-web服务器以保存到磁盘

使用JavaScript更改json值顺序

如何比较嵌套对象的更改并创建更改报告

警告!合同执行期间遇到错误[执行已恢复](Base Layer 2)

使用续集和下拉栏显示模型属性

如何在RTK上设置轮询,每24小时

InDesign—创建一个独立的窗口,在文档中进行更正时保持打开状态

判断表格单元格中是否存在文本框

分层树视图

如何将innerHTML字符串修剪为其中的特定元素?

本地库中的chartjs-4.4.2和chartjs-plugin-注解

Web Crypto API解密失败,RSA-OAEP

使用js构造一个html<;ath&>元素并不能使其正确呈现

从Nextjs中的 Select 项收集值,但当单击以处理时,未发生任何情况

为什么我的自定义元素没有被垃圾回收?

如何在DYGRAPS中更改鼠标事件和键盘输入

是否可以在Photoshop CC中zoom 路径项?

无法读取未定义的属性(正在读取合并)-react RTK

使每个<;li>;元素的 colored颜色 与随机生成的 colored颜色 列表不同(不重复