Задать вопрос
  • Почему при нажатии на таймер он не останавливается?

    neuotq
    @neuotq
    Прокрастинация
    Вы перезаписываете this.interval каждый раз при создании нового, а значит при остановке очищается последний созданный интервал.
    При вашей архитектуре выходит нужно хранить айди интервала в самом объекте-стейте пункта, так же как и время.
    Типа такого(сама идея, если нужно под себя доработайте):
    if(!oldItem.time){
            const IntervalId = setInterval(() => {
          
              if (oldItem.sec < 59) {
                oldItem.sec++;
              } else {
                oldItem.sec = 0;
                oldItem.min++;
              }
        
              this.setState(({ todo }) =>{
                const newItem = {...oldItem,
                  min: oldItem.min,
                  sec: oldItem.sec,
                  time: true,
                  intervalId: intervalId
                  }
                  const newstate = [
                    ...todo.slice(0,xid),
                    newItem,
                    ...todo.slice(xid + 1)
                  ]
                  return {
                    todo: newstate
                  }
              });
            }, 1000);
          }

    Ну и потом сбрасывать тоже из айдишника интервала который внутри объекта хранится.
    Ответ написан
    1 комментарий
  • Как можно удалить одну функцию?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Элементарно. Рекурсивно вызывать getStringCount и суммировать возвращённые значения.
    function getStringCount(obj) {
      let countString = 0;
      for (let i in obj) {
        if (typeof obj[i] === "object") {
          countString += getStringCount(obj[i]);
        } else if (typeof obj[i] === "string") {
          countString += 1;
        }
      }
      return countString;
    }
    Ответ написан
    Комментировать