reactjs - 如何获取元素的当前状态以响应渲染进度条?
问题描述
handlePercent=()=>{
if (this.state.phone!=="") {
this.setState(() => ({
percent: this.state.percent + 20,
}));
} else if(this.state.website!==""){
this.setState(() => ({
percent: this.state.percent + 20,
}));
}
return this.state.percent;
};
我有上述处理百分比状态的函数,但即使对象的状态,例如电话不是空的,它也不会给我正确的状态。例如,我使用控制台日志检查了电话状态,它是空的。
波纹管在那里,我称之为百分比对象。我用过“react-sweet-progress”
<div className="percent">
<p>Your profile is {this.state.percent}% complete:</p>
<Progress percent={this.handlePercent()}/>
</div>
解决方案
您应该使用prevState
insetState
而不是使用this.state
handlePercent = () => {
if (this.state.phone !== "") {
this.setState(prevState=> ({
percent: prevState.percent + 20,
}))
} else if(this.state.website!==""){
this.setState(prevState=> ({
percent: prevState.percent + 20,
}))
}
// don't return state
}
并传递this.state.percent
给Progress
<Progress percent={this.state.percent}/>
并handlePercent
在代码中的其他地方调用。
原因don't return state
是当您调用this.setState
它时,它将重新渲染组件并this.state.percent
生成正确的百分比。如果你 return this.state.percent
,它将返回错误的数据。
请添加组件的完整逻辑,以更好地了解如何做你想做的事。
推荐阅读
- c# - 尝试实现登录时出现 ArgumentException(ASP.NET Core 项目)
- ruby-on-rails - 在 ruby on rails 中的 simple_form 中提供无效输入时显示验证错误消息
- azure-devops - 如何在 azure 管道的自定义 task.json 输入选项中填充动态数据
- intellij-idea - IntelliJ 删除具有相同“名称”的代码
- jquery - Jquery 滚动慢锚回到标题
- android - (actionscript3) 如何在 Android AIR 中为嵌入式 Flash 游戏添加虚拟按钮?
- python - 使用正则表达式并将 Twitter 中的用户名转换为“usrusr”令牌
- ios - 强密码建议阻止用户输入
- debugging - PhpStorm 调试堆栈帧颜色解释
- python - Matplotlib 的绘图问题,图表从 1 开始