javascript - 在 ReactJs 中呈现时,react-countdown 会重置

标签 javascript reactjs

我正在创建一个游戏,用户可以在一段时间内尽可能多地点击按钮。

我已经使用 react-countdown 来创建计时器。但是当我点击一个按钮时,计时器会自动重置。

这是我的代码。

import React, { useState } from "react"
import Countdown from 'react-countdown';

function App() {

  const [name, setName] = useState("")
  const [isLogin, setIsLogin] = useState(false)
  const [counter, setCounter] = useState(0)

  const submitName = () => {
    setIsLogin(true)
  }

  const updateCounter = () => {
    console.log(counter)
    setCounter(counter + 1)
  }

  return (
    <div>
      {!isLogin ? (
        <div>
          <input
            style={{ width: 300, height: 30 }}
            placeholder="Input name here"
            value={name}
            onChange={e => setName(e.target.value)}
          />
          <button
            style={{ width: 50, height: 20, background: "red" }}
            onClick={() => submitName()}
          >Go</button>
        </div>
      ) : (
          <div
            style={{ width: "100vw", height: "100vh", background: "yellow" }}>
            <Countdown date={Date.now() + 100000} />
            <h1>{name}</h1>
            <h3>Click counter: {counter} </h3>
            <button
              style={{
                width: 100,
                height: 50,
                background: "red",
                border: "none",
                borderRadius: 25,
                color: "white",
                cursor: "pointer"
              }}
              onClick={() => updateCounter()}>Click here!</button>
          </div>
        )
      }
    </div>
  );
}

export default App;

问题是当我点击按钮时,setCounter(counter + 1) 正在运行并重新呈现页面。这使计数器重置。 我知道它为什么有问题,但我无法修复它。

最佳答案

您需要内存倒计时组件:

const CountdownWrapper = () => <Countdown date={Date.now() + 100000} />;
const MemoCountdown = React.memo(CountdownWrapper);

// usage
<MemoCountdown/>

之前,在每次渲染时 Date.now() 都会获得一个重置计时器的新值。

Edit Countdown reset

关于javascript - 在 ReactJs 中呈现时,react-countdown 会重置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66104667/

相关文章:

javascript - 升级到 Angular v9 并启用 Ivy 后,Angular 编译失败

javascript - 在 JS/NodeJS 中,当对象从数组中删除时会发生什么?

javascript - 在 ReactJS 中实现振动

javascript - 当我使用 react.js 投入生产时出错

javascript - 奇怪的 json 用法

javascript - 将卫星轨道添加到 WebGLEarth map (例如使用 Leafletjs 或 Cesiumjs)

Javascript:onchange使用相同的div并从2个不同的id打印

reactjs - 从 Next JS 中的节点模块导入 css 文件?

javascript - 上传组件在提供默认文件列表时未按预期运行

javascript - 错误 : Cannot resolve module 'react-dom'