Реагирует, если / else возвращается перед setState - PullRequest
0 голосов
/ 19 марта 2020

Я хочу go через функцию ScoreCal c, затем вернуть итоговое значение "primeCount" и setState primeScore для этого числа.

this.state.animeMax по-прежнему пусто, когда ScoreCal c () работает в componentWillMount. Когда я обновляю страницу sh, primeScore или primeCount изменяют значение. Я предполагаю, что это потому, что иногда устанавливается состояние "max", а иногда нет!?

Если у кого-то есть идеи, пожалуйста, дайте мне знать.

Спасибо!

export class Quality extends Component {
    constructor (props) {
        super (props) 
            this.state = {
                primeScore: 0,
                netflixScore: 0,
                huluScore: 0,
                provider:[],
                actionMax:'',
                animeMax:'',
                childrenMax:'',
                comedyMax:'',
                documentaryMax:'',
                horrorMax:'',
                musicalMax:'',
                romanceMax:'',
                scifiMax:'',
                thrillerMax:'',
            }
            this.ScoreCalc = this.ScoreCalc.bind(this);
    }
componentWillMount (){
    axios.get('http://localhost:8001/provider')
        .then(res => this.setState({
            provider: res.data
        },()=>{this.ScoreCalc()}))
    axios.get('http://localhost:8001/provider/actionmax')
        .then(res => this.setState({actionMax: res.data}))
.....10 more axios requests to setState for other "max"....

}
ScoreCalc (){
        let primeCount = 0
            if(this.state.provider[0].primeAction >= this.state.actionMax){
                primeCount += this.props.user.action;
                console.log(primeCount)
            } else {
                primeCount += (this.props.user.action*this.state.provider[0].primeAction/this.state.actionMax)
            }

            if(this.state.provider[0].primeAnime >= this.state.animeMax){
                primeCount += this.props.user.anime;
            } else {
                primeCount += this.props.user.anime*this.state.provider[0].primeAnime/this.state.animeMax;
                console.log(this.state.animeMax) //returns empty ''
                console.log(primeCount) //return infinity
            }

            if(this.state.provider[0].primeChildren >= this.state.childrenMax){
                primeCount += this.props.user.children;
            } else {
                primeCount += this.props.user.children*this.state.provider[0].primeChildren/this.state.childrenMax
            }

         console.log(primeCount); //return infinity
         this.setState({primeScore: primeCount})
}

1 Ответ

0 голосов
/ 19 марта 2020

Похоже, у вас есть какие-то опечатки?

В scoreCalc() вы проверяете так:

if(this.state.provider[0].primeAction >= this.actionMax){

Я думаю, это должно быть:

if(this.state.provider[0].primeAction >= this.state.actionMax){

То же самое для остальных if?

...