@KappyJS

Как обновить компонент в зависимости от функции?

Совсем запутался, помогите разобраться.
Есть форма. В ней используются радиобаттоны - кнопки, как переключатели. У активной кнопки есть класс active. Мне нужно выводить степень заполненности формы, каждое переключение кнопки использует Set State. Так же я использую refs. Моя идея такова: State поменяли, происходит жизненный цикл смены состояния. Вызывается : Component Did Update. Она нужна нам, поскольку мы тут можем получить refs с формы. В ней я произвожу подсчет выбранных ответов, и хочу прокинуть
this.setState({progress:active/((active+overs)/2)*100})

И тут код ушел в рекурсию.
Не так разве происходит цикл :
Нажали на кнопку, вызвали SetState, вызвался Will Update , render, DidUpdate тут мы меняем еще раз стейт , где он должен как раз прокинуть стэйт :
this.setState({progress:active/((active+overs)/2)*100})

Я немного запутался в жизненном цикле, помогите разобраться , заранее спасибо!
Я так понимаю, что в will update как раз и происходит рекурсия, потому что там вообще нельзя вызывать setState. Но как тогда и данные получить с формы, и состояние обновить. На ум приходит только shouldComponentUpdate (state.prev!=state.next)

Решил пойти другим путем, сделал функцию, при клике на которую берем refs, считаем и меняем стейт.
progressForm(){
   console.log(this.myRef)
   var active=0;
   var overs=0;
  for(let i=0;i<this.myRef.current.length;i++){
    console.log(this.myRef.current[i].className)
    if (this.myRef.current[i].className.includes('active')){
        active++;
    }
        else if (this.myRef.current[i].className.includes('btn'))
        overs++;
  }
  
  this.setState({progress:active/((active+overs)/2)*100}) 

 
 }

И суть в том, что лог формы выводит форму, со сразу измененным состоянием, где класс active.
А лог в цикле выводит старые данные, где еще класс не поменялся.
  • Вопрос задан
  • 160 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы