首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ReactJs - Countdown意外重置

ReactJs - Countdown意外重置
EN

Stack Overflow用户
提问于 2019-06-09 19:15:01
回答 1查看 584关注 0票数 1

我已经在我的项目中使用了Countdown,它就像一个护身符。但当我将它与简单的输入结合使用时,每当我的输入发生变化时,它就会重新启动。我只想重启它,而且只有在超时的情况下。下面是我的代码:

代码语言:javascript
复制
import React from 'react';
import { Input } from 'reactstrap';
import Countdown from 'react-countdown-now';
import { connect } from 'react-redux';

class Foo extends React.Component {
  constructor(props) {
    super(props);
    this.state = {
      code: '',
      disabled: false,
    };
    this.update = this.update.bind(this);
  }

  update(e) {
    this.setState({ code: e.target.value });
  }

  render() {
    return (
      <div>
        <Input
          className="text-center activationCode__letter-spacing"
          maxLength="4"
          type="text"
          pattern="\d*"
          id="activationCode__input-fourth"
          bsSize="lg"
          value={this.state.code}
          onChange={this.update}
        />{' '}
        <Countdown date={Date.now() + 120000} renderer={renderer} />
      </div>
    );
  }
}

const renderer = ({ minutes, seconds, completed }) => {
  if (completed) {
    return <p>reset</p>;
  }
  return (
    <p>
      {minutes}:{seconds}
    </p>
  );
};

const mapStateToProps = state => ({
  user: state.auth,
});

export default connect(
  mapStateToProps,
  null,
)(Foo);

有什么建议吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-06-09 19:30:28

计数器重新启动的原因是,当您更改输入字段时,您正在更新状态。更新状态将导致最终再次执行Date.now()函数的重现器。

你的问题的一个解决方案是在构造函数中将倒计时的日期向上移动,这样它只设置一次,然后在呈现函数中通过state引用它。

代码语言:javascript
复制
constructor(props) {
super(props);
this.state = {
  code: '',
  disabled: false,
  date: Date.now() + 120000
};
this.update = this.update.bind(this);
}

...

render() {
  return (
    <div>
      <Input
        className="text-center activationCode__letter-spacing"
        maxLength="4"
        type="text"
        pattern="\d*"
        id="activationCode__input-fourth"
        bsSize="lg"
        value={this.state.code}
        onChange={this.update}
      />{' '}
      <Countdown date={this.state.date} renderer={renderer} />
    </div>
  );
}
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56514128

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档