reactjs - react 链接到按钮超时

标签 reactjs react-router-dom settimeout

我有一个简单的按钮,当我点击他时,他会将我重定向到网站中的另一个页面 现在使用 react 路由器( <Link to=''> )。现在我想要的是当我点击按钮时他等待 3 秒然后重定向我 我怎样才能做到这一点?

谢谢

最佳答案

您可以创建一个需要额外延迟的自定义链接组件。

示例:

使用点击处理程序来阻止默认链接操作,以便您可以“注入(inject)”延迟导航。使用 React ref 存储对计时器的引用,并使用安装 useEffect Hook 来清除任何正在运行的计时器,以防组件在到期之前卸载。使用 useNavigate Hook ,然后使用所有适当的参数进行命令式导航。

import { Link } from 'react-router-dom';

const DelayedLink = ({ delay, replace, state, to, ...props }) => {
  const navigate = useNavigate();
  const timerRef = useRef();

  useEffect(() => () => clearTimeout(timerRef.current), []);

  const clickHandler = (e) => {
    e.preventDefault();
    timerRef.current = setTimeout(navigate, delay, to, { replace, state });
  };

  return <Link to={to} {...props} onClick={clickHandler} />;
};

用法:

<DelayedLink delay={3000} to="/test">
  Test
</DelayedLink>
<DelayedLink delay={3000} to="/test" state="foobar">
  Test w/state
</DelayedLink>
<DelayedLink to="/test">Test w/o delay</DelayedLink>

Edit react-link-to-button-timeout

关于reactjs - react 链接到按钮超时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71421800/

相关文章:

javascript - setInterval 函数 JavaScript 的问题

reactjs - React Native to firestore : Firestore (8. 2.1):连接 WebChannel 传输出错

javascript - React.js 如何访问子组件中的输入值

javascript - React 中的额外等待会破坏异步测试

javascript - react 不识别参数?

javascript - 通过 id React 私有(private)路由

javascript - 浅渲染不渲染包装在消费者中的组件( Jest/ enzyme )

reactjs - 如何在驻留在使用从 React Router 构建的嵌套 URL 的子目录上的 SPA React 应用程序上正确配置 Apache?

javascript - setTimeout 的替代方案?

javascript - 为什么我无法访问 setTimeout 中的事件值?