在 setState 之前反应 if/else returns
React if/else returns before setState
我想通过 Function ScoreCalc 然后 return 最后 "primeCount" 和 setState primeScore 到那个数字。
this.state.animeMax 在 componentWillMount 中运行 ScoreCalc() 时仍然为空 ''。
当我刷新页面时,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})
}
你好像有错别字?
在 scoreCalc()
中,您是这样检查的:
if(this.state.provider[0].primeAction >= this.actionMax){
我认为应该是:
if(this.state.provider[0].primeAction >= this.state.actionMax){
其他 if
的也是一样吗?
我想通过 Function ScoreCalc 然后 return 最后 "primeCount" 和 setState primeScore 到那个数字。
this.state.animeMax 在 componentWillMount 中运行 ScoreCalc() 时仍然为空 ''。 当我刷新页面时,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})
}
你好像有错别字?
在 scoreCalc()
中,您是这样检查的:
if(this.state.provider[0].primeAction >= this.actionMax){
我认为应该是:
if(this.state.provider[0].primeAction >= this.state.actionMax){
其他 if
的也是一样吗?