javascript - 如何在react中使用settimeout方法?

标签 javascript reactjs

我想知道如何使用setTimeout()方法。基本上,我想在几秒钟后单击该元素,然后执行某些操作。

所以我的代码如下,

class SomeComponent extends React.PureComponent {
    on_first_render = () => {
        this.somemethod_called();
        setTimeout(() => {
            this.props.handle_click(52, 16);
        },0);
        setTimeout(() => {
            this.props.handle_click(522, 352);
         }, 0)

         setTimeout(() => {
             const input = document.querySelector('input[type=text] 
                           [name=somename]');
             input && input.blur();
         }, 700);

从上面的代码可以看出,在两个 setTimeout() 方法中调用了相同的 handle_click() 方法,7秒后我在文档中搜索输入元素并删除集中注意力。

我觉得这是笨拙且不正确的方法...有人可以让我知道如何以另一种方式做到这一点,而不是像这样重复。

谢谢。

最佳答案

事实上,您的 setTimeout 并没有等待任何事情;您正在排队三个超时,这三个超时将分别在 0、0 和 700 毫秒后解决。

虽然我不太确定你最终想要什么,或者如果你正在以非常惯用的 React 方式做事,我建议使用 async/ wait 和“延迟”辅助函数:

const delay = ms => new Promise(resolve => setTimeout(resolve, ms));

const onFirstRender = async () => {
  this.somemethod_called();
  await delay(100);
  this.props.handle_click(52, 16);
  await delay(100);
  this.props.handle_click(522, 352);
  await delay(700);
  const input = document.querySelector("input[type=text][name=somename]");
  if (input) {
    input.blur();
  }
};

关于javascript - 如何在react中使用settimeout方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58707099/

相关文章:

javascript - 从 axios 响应 reactjs 填充输入字段

javascript - React/Redux bundle.js 太大了

javascript - 为什么使用 Number.parseInt 而不是 parseInt()?

javascript - 在 React.js 中的渲染 return() 中显示获取结果

javascript - ReactJS 中的自定义图像切换按钮

javascript - 为什么控制台中不显示 html 中的 AngularJS 错误?

reactjs - 如何为成功部署的React App修复Heroku应用程序错误

javascript - 谷歌在请求外部文件的离线/本地主机应用程序中美化

javascript - 我的 ajax post 方法有效,但我无法通过 php 捕获该值

javascript - 如何将文档名称发送到 javascript 文件?