为了账号安全,请及时绑定邮箱和手机立即绑定

如何在按钮点击反应中添加延迟?

如何在按钮点击反应中添加延迟?

哈士奇WWW 2022-01-07 19:16:54
我正在尝试延迟单击按钮,以便我正在使用的库可以进行快速 api 调用以进行验证。我目前正在使用箭头函数进行反应并尝试 setTimeout。但是,由于某种原因,这似乎触发了页面加载调用。这是我的代码。  onClick={this.handleCardSubmit}handleCardSubmit = setTimeout(() => {    this.setState({ showLoaderForPayment: true });    const { collectJs } = this.state;    collectJs.startPaymentRequest();    this.setState({ isPaymentRequestCalled: true });  }, 500);
查看完整描述

2 回答

?
森林海

TA贡献2011条经验 获得超2个赞

您需要按如下方式更改函数声明和定义


handleCardSubmit = ()=>{

setTimeout(() => {

    this.setState({ showLoaderForPayment: true });

    const { collectJs } = this.state;

    collectJs.startPaymentRequest();

    this.setState({ isPaymentRequestCalled: true });

  }, 500);

}

在您的代码片段中,您只是将 settimeout 函数引用传递给 handeCardSubmit ,因此没有绑定 this。为了正确执行它,您必须在箭头函数中编写 setTimeout 函数,然后它将以 500 毫秒的延迟工作。


查看完整回答
反对 回复 2022-01-07
?
守着一只汪

TA贡献1872条经验 获得超3个赞

您可以使用 e.preventDefault(),并尝试以下代码。


handleCardSubmit = (e) => {

    e.preventDefault();

    setTimeout(() => {

    this.setState({ showLoaderForPayment: true });

    const { collectJs } = this.state;

    collectJs.startPaymentRequest();

    this.setState({ isPaymentRequestCalled: true });

  }, 500);

};

或者您可以使用async-await。


handleCardSubmit = async (e) => {

    e.preventDefault();

    await setdata();


    setdata() {

    this.setState({ showLoaderForPayment: true });

    const { collectJs } = this.state;

    collectJs.startPaymentRequest();

    this.setState({ isPaymentRequestCalled: true });

}

};


查看完整回答
反对 回复 2022-01-07
  • 2 回答
  • 0 关注
  • 211 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信