reactjs - React js警告:在现有状态转换期间无法更新(例如在`render`中)
问题描述
我对反应代码不太熟悉。我试图获取状态的百分比和计算的百分比,以便我可以将百分比值保存到数据库中。我有以下代码:
getTotalPercentage(){
let totalCost = this.getTotalCost();
let total = this.getGrandTotal();
let per = parseFloat(total / totalCost * 100).toFixed(4);
if (isNaN(per)){
return 0 + " %";
}
const prev = parseFloat(this.state.percentage);
const next = parseFloat(per);
if(prev !== next){
console.log(this.props);
this.setState({ percentage: next});
}
return next + " %";
}
而作为回报
<input
onChange={this.changePercentage.bind(this)}
name="percentage"
type="text"
value={this.getTotalPercentage()}
className="input-sm"
readOnly
/>
但我收到以下错误
警告:在现有状态转换期间无法更新(例如在 内
render
)。渲染方法应该是 props 和 state 的纯函数。
解决方案
问题在getTotalPercentage
. 每次 react 进行渲染时,您都会调用此函数。但是在这个函数内部,你setState
. React 会阻止您这样做以避免无限循环的渲染(您 setState 然后重新渲染然后重复更新状态)。
要解决这个问题,请将所有逻辑从getTotalPercentage
函数changePercentage
中移出。
然后将输入组件中的值更改为:
value={`${this.state.percentage}%`}
推荐阅读
- sql - PostgreSQL - 如何使用窗口函数从列中提取最大值
- php - 没有为 [voyager] 定义提示路径
- python - 如何在tensorflow中找到给定.ckpt.meta文件的输出节点名称
- javascript - IndexedDB 的索引性能:选择和插入
- python - 如何使用 Python 在 Selenium Webdriver 中选择一个具有常见类名的元素?
- google-url-shortener - Google URL Shortner cURL 返回错误
- node.js - 如何在 VSCode 终端中运行 NPM 命令?
- c - 用递归方法遍历链表
- django - Django celery 任务信息保存在哪里?
- javascript - React 组件 DRY 重构