【问题标题】:How to generate a random number every 5 seconds in React.js?如何在 React.js 中每 5 秒生成一个随机数?
【发布时间】:2020-11-24 21:06:35
【问题描述】:

我知道这个问题已经被问及回答,但我似乎无法得到预期的输出。

let ranNum = 0;

setTimeout(function(){   
  ranNum = Math.floor((Math.random()*100)+1); 
}, 5000);

当我运行此程序时,我的 chrome 浏览器会不断生成随机数,直到我停止程序。我也用 setInterval 试过这个。我想要发生的是每 5 秒生成一个随机数并将其添加到我的代码中的另一个变量中。(所以这个变量应该每 5 秒显示一个不同的数字)。我在我的客户端做这个 - React.js 并且想知道是否有另一种方法可以通过反应来做到这一点。感谢您的帮助!

【问题讨论】:

  • 您的问题有点不清楚——您所说的“显示”或“将其添加到另一个变量”是什么意思?您现在的代码(它是超时而不是间隔)应该在 5 秒内将 1 到 100 之间的随机整数分配给 ranNum

标签: javascript reactjs settimeout setinterval


【解决方案1】:

您可以使用useEffect 挂钩设置间隔并更新状态,然后显示状态

const RandomNumber = () => {
  const [number, setNumber] = React.useState(0);
  
  // add side effect to component
  React.useEffect(() => {
    // create interval
    const interval = setInterval(
      // set number every 5s
      () => setNumber(Math.floor(Math.random() * 100 + 1)),
      5000
    );

    // clean up interval on unmount
    return () => {
      clearInterval(interval);
    };
  }, []);

  return <p>{number}</p>;
};

ReactDOM.render(<RandomNumber />, document.getElementById("root"));
<script src="https://unpkg.com/react@17/umd/react.production.min.js" crossorigin></script>
<script src="https://unpkg.com/react-dom@17/umd/react-dom.production.min.js" crossorigin></script>
<div id="root"></div>

【讨论】:

  • 这个。您需要使用钩子或旧的类生命周期方法来确保组件正确呈现和更新。并在组件卸载后清除间隔,以防止启动多个计数器而不清除它们。
猜你喜欢
  • 2014-11-24
  • 1970-01-01
  • 2014-08-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-03-24
相关资源
最近更新 更多