Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Reactjs 防止在React中连续单击按钮_Reactjs_Button_React Bootstrap - Fatal编程技术网

Reactjs 防止在React中连续单击按钮

Reactjs 防止在React中连续单击按钮,reactjs,button,react-bootstrap,Reactjs,Button,React Bootstrap,我试图阻止在我的项目中连续单击按钮,并且只允许单击一次。我也希望它只是一个单一的点击,不允许双击,如果这是可能的 要做到这一点,我想在再次按下按钮之前增加一个5秒的时间,但我不知道如何做到这一点。该按钮是将用户重定向回主页的链接 这是一种在单击计时器时设置按钮的方法吗 <Button id="back-btn" variant="link" className="btn btn-link" onClick={props.goBack} alt="homepage"> Homepage

我试图阻止在我的项目中连续单击按钮,并且只允许单击一次。我也希望它只是一个单一的点击,不允许双击,如果这是可能的

要做到这一点,我想在再次按下按钮之前增加一个5秒的时间,但我不知道如何做到这一点。该按钮是将用户重定向回主页的链接

这是一种在单击计时器时设置按钮的方法吗

<Button id="back-btn" variant="link" className="btn btn-link" onClick={props.goBack} alt="homepage">
Homepage
</Button>
有什么想法吗? 干杯
R

制作按钮组件可能是最可重用的。您可以处理onClick事件以设置禁用状态,然后启动计时器将其设置回false。例如:

const DebouncedButton = ({ as = button, delay, onClick, ...props }) => {
  const [isDisabled, setDisabled] = useState(false);

  useEffect(() => {
    if (!isDisabled) {
      // timeout elapsed, nothing to do
      return;
    }

    // isDisabled was changed to true, set back to false after `delay`
    const handle = setTimeout(() => {
      setDisabled(false);
    }, delay);
    return () => clearTimeout(handle);
  }, [isDisabled, delay]);

  const handleClick = (e) => {
    if (isDisabled) {
      return;
    }

    setDisabled(true);
    return onClick(e);
  };

  const Component = as;
  return <Component {...props} disabled={isDisabled} onClick={handleClick} />;
};


当前,它将按钮的disabled属性设置为true,但是如果您不想看到,只需从组件中删除disabled={isDisabled}。

基本上,您需要使用一个带有计时器的disabled状态

检查此代码笔:

此外,如果这与某个事件有关,则不确定为什么需要5秒,最好绑定到事件而不是时间

<DebouncedButton
  as={Button}
  delay={5000}
  id="back-btn"
  variant="link"
  className="btn btn-link"
  onClick={() => console.log('click!')}
  alt="homepage"
/>
  state = {
    disabled: false,
  };

  handleButtonClicked = () => {
    //going back logic
    this.setState({
      disabled: true,
    });
    setTimeout(() => {
        this.setState(() => ({
          disabled: false,
        }));
      }, 5000);
  };

  render() {
    const { disabled } = this.state;
    return (
      <button   
        onClick={this.handleButtonClicked}
        disabled={disabled}
      >
        Button to be disabled
      </button>
    );
  }