【发布时间】:2019-01-29 10:26:11
【问题描述】:
我正在尝试破解我的状态未更新的特殊问题。
我有一个通过 Axios 调用 NASA api 的函数,它运行良好。目前datePicked 状态默认为空,这意味着 GET 请求默认为当前日期。我要添加生成随机日期的功能(函数onRandomDateClick),一切正常。
然后我想用生成的日期更新datePicked的状态,然后运行保存axios请求的onImageGet函数。
初始状态
class Photo extends Component {
state = {
apiUrl: 'XXXXXXXX',
apiKey: 'XXXXXXXX',
image: null,
imgChecked: false,
datePicked: ""
};
生成随机日期、记录变量和状态。状态当前显示为空白。 this.setState 不起作用。
onRandomDateClick = (e) => {
function randomDate(start, end) {
return new Date(start.getTime() + Math.random() * (end.getTime() - start.getTime()));
}
let randomDateResult = randomDate(new Date(2012, 0, 1), new Date())
let datePicked = randomDateResult.toISOString().slice(0,10);
this.setState({datePicked})
console.log("variable is " + datePicked);
console.log("state is " + this.state.datePicked);
this.onImageGet();
}
Axios 在此处调用状态
onImageGet = e => {
axios.get(`${this.state.apiUrl}?api_key=${this.state.apiKey}&date=${this.state.datePicked}`)
//response always starts res.data
.then(res => {
const image = res.data;
this.setState({ image })
})
this.setState({imgChecked: true})
}
render() {
...blah blah...
return (
<div className="photo">
... blah blah blah ...
</div>
);
}
}
【问题讨论】:
-
您实际上还没有设置状态。
this.setState({parameter: value})是正确的语法。 -
另一种方法是使用redux和redux-axios-middleware进行异步操作。
-
js 是异步的。你应该做这样的事情。 gist.github.com/nazrdogan/1167c9683a66f038516f527184b024c3
-
@KenoClayton 我的印象是,如果 var 名称和状态相同,可以这样做吗?这不正确吗?
-
我实际上不确定,我从未见过这种实现,所以我可能会弄错。
标签: javascript reactjs