我试图在promise的then()
内设置状态,但状态值未保存,在then()外无法访问。
以下是更新后的代码:
handleSelect = location => {
this.setState({ location });
geocodeByAddress(
location
)
.then(results => getLatLng(results[0]))
.then(latLng => {
this.setState({
location_latitude: latLng.lat,
location_longitude: latLng.lng,
})
console.log(this.state.location_latitude); // returns the correct value
})
console.log(this.state.location_latitude); // returns null (the originally declared value)
}
如果我console.log(this.state.location_latitude)
我得到一个null
值。但是,如果我console.log在那么()块,我得到正确的值。在这种情况下如何设置状态?
更新的说明:
为了给整个逻辑提供更好的上下文:我使用了一个GooglePlacesAutoComplete组件,它允许用户从下拉列表中选择一个位置。当用户从下拉列表中选择位置时,将调用上述方法handleSelect
。然后,我使用geocodeByAddress
方法提取用户选择的地点的纬度和经度,这是一个promise。然后,我需要检索纬度和经度,并相应地设置状态,稍后用于发送到数据库。我还不能将值提交到数据库,因为用户需要填写其他表单输入(也存储在状态中),一旦他单击submit,我将在一次对后端的调用中提交所有状态元素。因此,我不想使用componentDidMount()
更新任何内容,也不想使用componentdiddupdate()
更新任何内容。在任何情况下,我只能将状态值存储在geocodeByAddress
的then中(如果我在这里出错,请更正)。因此,我必须能够修改然后
块中的状态值。
您需要将函数上下文绑定到当前类/组件。试试下面的方法。创建一个像“callSetState”这样的函数,将其与此绑定,并在调用时将值作为参数传递给它。
import React, { Component } from 'react';
class Test extends Component{
constructor() {
super()
this.callSetState = this.callSetState.bind(this);
}
callSetState(latitude, longitude) {
this.setState({
location_latitude: latitude,
location_longitude: longitude,
})
}
/* Call this func in your class and call callSetState which is already bound to your component in constructor */
// geocodeByAddress(location)
// .then(results => getLatLng(results[0]))
// .then(latLng => this.callSetState(latLng.lat, latLng.lng));
}
问题是,当您设置状态时,您无法立即看到状态结果。这就是为什么console.log
返回null
。确保您的控制台.log
位于渲染块中。这是因为
设置状态
操作是异步的
,并且是为了提高性能而批处理的。setState的文档中对此进行了解释。看看这个=
问题内容: 我正在创建一个简单的聊天应用程序,在其中我通过axios对数据库进行api调用,该API返回了一系列消息对象。我可以在componentWillMount中进行axios调用时获取数据。然后,我试图设置状态以显示对话。这是代码: 我看过一些有关生命周期功能和设置状态的帖子,似乎我在做正确的事情。 再次强调,axios调用正常,设置状态不正常。我仍然看到一个空数组。提前致谢! 编辑:这是
首先,我尝试了这个线程上的每一个答案:如何在iOS7中更改状态栏文本颜色,但我无法让状态栏显示白色文本。 在应用程序启动时,文本在加载到我的根视图控制器之前显示为白色。我认为问题在于,我的根视图控制器设置为不显示状态栏(我想要的),但其他每个视图都需要显示它。 当我转到第二个视图时,我看到状态栏文本从白色闪烁到黑色。 我已尝试在AppDelegate中将状态栏设置为亮起。 我已经尝试在rootVi
我有一个处理程序,在输入字段发生变化时触发。但是,当我将状态日志记录到控制台resData是'未定义'?这是不可能的,因为console.log(身体)确实返回结果。
做一个简单的井字游戏。我尝试在鼠标进入时突出显示单个单元格,然后在鼠标离开时恢复正常-使用状态和内联样式来完成这一点。状态在鼠标进入时变化很好(样式也是如此),但在鼠标离开时不会恢复正常。我在这里错过了什么?
是否有方法将defaultValue传递给状态?我也尝试了value={},但值根本不变。
基本React Web应用程序 应用: 使用onMouseEnter和onmouseLeave呈现出与悬停按钮的联系。 问题: 无法更改悬停状态 附加: 如何在团队常量内将悬停状态从true更改为false?我刚反应过来。 我明白改变状态的简单方法,但这对我来说有点复杂。