Использование расчета для асинхронной установки состояния - PullRequest
0 голосов
/ 12 декабря 2018

У меня есть вызов axios, где я хочу установить setState в моем компоненте, но одна из переменных состояния требует некоторой условной логики, а не того, что устанавливать состояние.Теперь я сомневаюсь, что лучше всего делать это

   }).then(res =>
       this.setState({
           name: res.data.fname,
           sName: res.data.sname,
           percentage: res.data.percentage,
           result: res.data.result,
           showResult: true,
           type: this.typeHandler(this.state.percentage) // here a tried calling a handler to make my conditional setState call
       })
       )
       }


typeHandler = (percentage) =>{
    if(percentage >= 50){
        this.setState({type: 'succes'})
    }else{
        this.setState({type: 'failure'})
    }
    }

. Конечно, проблема с этим кодом состоит в том, что это произойдет асинхронно, и, следовательно, состояние не будет установлено правильно.первоначально.

Есть ли лучший способ улучшить эту логику, чтобы изначально состояние устанавливалось вместе с другими атрибутами, и я мог бы включить свою логику?

Я полагаю, альтернативой было бы получитьсначала процент, а затем просто вызывать обработчик после.

1 Ответ

0 голосов
/ 12 декабря 2018

Вместо использования состояния в setState, вы можете использовать res.data.percentage.Кроме того, typeHandler должен вернуть значение вместо установки его в состояние, если вы уже вызываете его в setState

}).then(res =>
       this.setState({
           name: res.data.fname,
           sName: res.data.sname,
           percentage: res.data.percentage,
           result: res.data.result,
           showResult: true,
           type: this.typeHandler(res.data.percentage) 
       })
   )}


typeHandler = (percentage) =>{
    if(percentage >= 50){
        return 'succes';
    }else{
        return 'failure';
    }
}
...