我正在尝试设置Axios Response数据的状态。 REST调用有效,但状态未设置。
this.state = {
source: sources['bunnyMovie'],
startDate : moment(),
endDate: moment(),//endDate : moment()
filename: "",
storageArea: [],
v_bucketName: "",
v_creationDate: "",
};
componentDidMount() {
const self = this;
axios.get(`/api/Storage/`)
.then(response => {
self.setState({storageArea: response.data});
console.log(response);
console.log("StorageArea: " + self.storageArea);
});
}
<option value="" />
{this.state.storageArea.map((Buckets, i) => (
<option native="true" key={i} value={Buckets.Name}>
{Buckets.Name}
</option>
但是storageArea为null。顺便说一句,在我更改之前,类型可以是数组或为NULL。无论哪种方式,它都无法正常工作。我错过了什么?
答案 0 :(得分:0)
您可以使用
访问storageAreathis.state.storageArea
无论如何,状态将异步更新,所以你可能想要
console.log(this.state.storageArea)
在render方法中,而不是在setState
之后答案 1 :(得分:0)
首先,将您的控制台输出更改为self.state.storageAge
接下来,我建议您在调用render()
之后,而不是直接在setState
方法中测试状态更改。这是因为每次调用setState
时,React都会重新呈现所有组件。
根据React docs:
setState()
不会立即改变this.state,但会创建挂起状态转换。调用此方法后访问this.state
可能会返回现有值。无法保证对setState的调用进行同步操作,并且可以对调用进行批处理以获得性能提升。
答案 2 :(得分:0)
如前所述,setState
是异步的,因此如果要记录更新后的状态,则需要在更新完成后调用console.log
。
在render
方法中进行操作会有效,但我发现在setState
回调清理器中调用它。
self.setState({storageArea: response.data},() => console.log(self.state.storageArea))