Как сбросить интервал и вызвать API с интервалом в функции в реакции js - PullRequest
0 голосов
/ 14 января 2020

Здравствуйте, я хотел сбросить мой установленный интервал всякий раз, когда моя функция вызывается iam, вызывая мой интервал в componentDidmount в реаги js, и я хочу, чтобы он сбрасывал предыдущий интервал всякий раз, когда эта функция вызывается iam, также меняя значение api. в той же функции, и теперь я хочу, чтобы он вел себя с изменениями. Функция всех трех из keyPressed Ниже мой код.

import React, { Component } from "react";
import { HotKeys } from "react-hotkeys";
import Axios from "axios";

class Test extends Component {
  constructor(props) {
    super(props);
    this.state = {
      seconds: 3,
      color: null,
      items: [],
      currentItem: [],
      index: 0
    };
    this.handleChange = this.handleChange.bind(this);

    this.keyMap = {
      DONT_APPLIES: ["a", "A"],
      APPLIES: ["s", "S"],
      STRONGLY_APPLIES: ["d", "D"]
    };

    this.handlers = {
      DONT_APPLIES: e => {
        this.keyPressed();
      },
      APPLIES: e => {
        this.keyPressed1();
      },
      STRONGLY_APPLIES: e => {
        this.keyPressed2();
      }
    };
  }
  keyPressed(e) {
    const { index, items } = this.state;
    const nextQuestion = index + 1;
    this.setState({ currentItem: items[nextQuestion], index: nextQuestion });
    console.log(this.state);
  }
  keyPressed1(e) {
    const { index, items } = this.state;
    const nextQuestion = index + 1;
    this.setState({ currentItem: items[nextQuestion], index: nextQuestion });
    console.log(this.state);
  }
  keyPressed2(e) {
    const { index, items } = this.state;
    const nextQuestion = index + 1;
    this.setState({ currentItem: items[nextQuestion], index: nextQuestion });
    console.log(this.state);
  }
  handleChangeColor = newColor => {
    this.setState({
      color: newColor
    });
  };
  componentDidMount() {
    this.myInterval = setInterval(() => {
      const { seconds } = this.state;

      if (seconds > 0) {
        this.setState(({ seconds }) => ({
          seconds: seconds - 1
        }));
      } else if (seconds == 0) {
        return this.handleChangeColor("#840000");
      }
    }, 1000);
    Axios.get("https://jsonplaceholder.typicode.com/users")
      .then(response => {
        console.log(response);
        this.setState({
          items: response.data.result.items,
          currentItem: response.data.result.items[0],
          index: 0
        });
      })
      .catch(error => {
        console.log(error);
      });
  }

  componentWillUnmount() {
    clearInterval(this.myInterval);
  }

  render() {
    const { seconds } = this.state;
    const timebox = {
      width: "50px",
      height: "20px"
    };
    const { currentItem } = this.state;
    return (
      <HotKeys keyMap={this.keyMap} handlers={this.handlers}>
        <div id="wrapper" class="myleaty">
          <div class="myleaty-holder">
            <div class="container">
              <div style={{ background: this.state.color }} class="myleaty-box">
                <div style={timebox}>
                  <h2>{seconds}</h2>
                </div>
                <div class="logo">
                  <a href="#">
                    <img src="images/logo.png" alt="leaty" />
                  </a>
                </div>
                <p key={currentItem.id}>{currentItem.pqDetail}</p>
                <div class="btn-row">
                  <button className="btn btn1">Does not Applies</button>
                  <button className="btn">Applies</button>
                  <button className="btn btn1">Strongly Applies</button>
                </div>
              </div>
            </div>
          </div>
        </div>
      </HotKeys>
    );
  }
}

export default Test;
...