javascript - 在 promise 内部和外部设置 state 会影响 react 中的渲染组件
问题描述
我使用 axios 和 promise 来获取数据。我注意到的是,当我将 setState() 函数置之不理时,即在 then() 函数中,子组件不会呈现。但是当我将相同的 setState() 函数放在 promise 中时,子组件就会完美呈现。
承诺中的 setState()
axios({
method: 'POST',
contentType: 'application/json',
url: 'url',
data: data
}).then(function (response) {
this.setState({
stateItem: response.data.obj
})}.bind(this)).catch(error){
console.log(error);
}
以上程序可以stateItem
完美渲染。
承诺之外的 setState()
let val = 0;
axios({
method: 'POST',
contentType: 'application/json',
url: 'url',
data: data
}).then(function (response) {
val = response.data[0].value;
}.bind(this)).catch(error){
console.log(error);
}
this.setState({ stateItem: val })
状态更新完美,但依赖于该状态的组件不会更新。谁能详细说明为什么会这样?后台发生了什么?
解决方案
它是一个异步函数,因此在解决承诺之前不会更新 val,并且在解决承诺之前会设置状态
let val = 0;
axios({
method: 'POST',
contentType: 'application/json',
url: 'url',
data: data
}).then(function (response) {
val = response.data[0].value;
this.setState({ stateItem: val })
}.bind(this)).catch(error){
console.log(error);
}
像这样设置状态
推荐阅读
- html - 在html中居中按钮
- javascript - NPM Jquery 客户端与服务器端
- java - 尝试将 CSS 与 JavaFx 一起使用,但出现错误
- python - 将具有包含列表的单列的系列拆分为具有单个值的多列
- r - 我如何使用类似 a:b 的表达式按名称对变量子集进行 rowSum
- json - 在 Swift 中解析具有多个相同标识符的 JSON
- python - 为什么我收到以下代码的“HTTPError: HTTP Error 404: Not Found”?
- react-native - 更新购物车商品编号而不是附加新商品
- c# - 访问令牌已过期,无法刷新。错误:刷新错误、刷新错误、刷新错误
- discord - 机器人如何在不重复或循环代码的情况下一遍又一遍地说出消息