Не могу найти где код ломается setTimeout

Задача написать приложение светофора на реакте. Данный код выполняется в порядке К => Ж => З => Ж => К и далее при попытке снова запустить цикл перейдя на желтый падает в ошибку. Понимаю, что не срабатывает setTimeout, но не могу понять почему)

     React.useEffect(() => {
    console.log('effect')
    const link = window.location;
    console.log(link.pathname)
    if (link.pathname === '/red') {
      console.log('red')
      const timer = setTimeout(() => {
        setFromRedToYellow(true)
        setFromGreen(false);
        setFromYellowToGreen(false)
        setFromGreenToYellow(false)
        setFromYellowToRed(false)
      }, 10000)
      
    } else if (link.pathname === '/yellow') {
      console.log('yellow')
      if (fromGreen) {
        const timer = setTimeout(() => {
          setFromYellowToRed(true)
          setFromRedToYellow(false);
          setFromYellowToGreen(false)
          setFromGreenToYellow(false)
          setFromGreen(false)
        }, 3000)
        return () => clearTimeout(timer);
      } else {
        console.log('1111111')
        console.log('test2')
        const timer = setTimeout(() => {
          console.log('test22')
          setFromRedToYellow(false)
          setFromYellowToGreen(true)
          setFromGreenToYellow(false)
          setFromYellowToRed(false)
          setFromGreen(false)
        }, 3000)
        return () => clearTimeout(timer);
      }
    } else if (link.pathname === '/green') {
      console.log('green')
      const timer = setTimeout(() => {
        setFromGreen(true)
        setFromRedToYellow(false)
        setFromYellowToGreen(false)
        setFromGreenToYellow(true)
        setFromYellowToRed(false)
      }, 15000)
      return () => clearTimeout(timer);
    }
  })



   
  return (
    <div className="page">
      <main className="main">
        <Switch>
          <Route path='/red'>
            {fromRedToYellow ? <Redirect to="/yellow" /> : <TrafficLights redOn={redOn} />}
          </Route>
          <Route path='/yellow'>
            {fromYellowToGreen ? <Redirect to='/green' /> : (fromYellowToRed ? <Redirect to='/red' /> : <TrafficLights yellowOn={yellowOn} />)}
          </Route>
          <Route path='/green'>
          {fromGreenToYellow ? <Redirect to="/yellow" /> : <TrafficLights greenOn={greenOn} />}
          </Route>
          <Route path="/" >
            <Redirect to='/red' />
          </Route>
        </Switch>
      </main>
    </div>
  )

И сама ошибка:

Error: Maximum update depth exceeded. This can happen when a component repeatedly calls setState inside componentWillUpdate or componentDidUpdate. React limits the number of nested updates to prevent infinite loops.

введите сюда описание изображения


Ответы (0 шт):