我正在构建一个反应价格跟踪应用程序,该程序将处理您的所有费用,收入,然后将其列出。
在将项目添加到费用或收入后,我不得不更新预算,但是由于setState的异步特性,它无法正常工作?
这是我的功能
async create(e){
e.preventDefault()
var type = this.type.value
var obj = {'id':this.NextId(type),'description':this.description.value,'amount':this.amount.value}
if (type ==="expense"){
obj.percentage = "%100"
var newState = this.state.setState((prevState)=>({
expense:[...prevState.expense,obj],
totalExpense:prevState.budget - parseInt(this.amount.value)
}))
}
else{
var newState = this.state.setState((prevState)=>({
income:[...prevState.income,obj],
totalIncome:prevState.totalIncome + parseInt(this.amount.value)
}))
}
this.state.setState({budget:this.state.totalIncome - this.state.totalExpense,percentage:this.getPercentage()}))
}
答案 0 :(得分:1)
您可以使用setState
回调
例如,假设您要在费用更新后更新预算,则可以传递一个函数作为this.setState(prevState => ({ expense: prevState.expense -10 }), () => {
this.setState(prevState => ({ budget: prevState.totalIncome - prevState.expense }))
})
的回调
this.setState(prevState => ({ expense: prevState.expense -10, budget: prevState.budget - 10 }))
或者您可以同时更新多个项目
public static string ResultsFolder => DateTime.Now.ToString("MM.dd.yyyy h:mm:ss");
答案 1 :(得分:0)
我制作了一个新函数,将setState视为Promise
async PromiseSate(state){
await new Promise(resolve => this.setState(state,resolve))
}
var exampleSetState = PromiseState({data:"data"})
那么你可以这样做
exampleSetState.then("your code goes here")