React中setState方法修改this.state.todayDate不生效问题求助
问题原因及解决方案
- setState异步特性导致你误以为更新失败
React中setState是异步批量执行的,你在调用setState后立刻打印this.state.todayDate,读取到的还是更新前的旧值,这是正常设计,不代表setState没有生效。如果需要确认更新后的状态,可以把打印逻辑放到setState的第二个回调参数中:
this.setState({ todayDate: tdayDate }, () => { // 回调会在state更新完成后触发,这里能拿到最新值 console.log(this.state.todayDate) })
另外你在componentDidMount中调用getDates后立刻发起axios请求,此时setState还没完成更新,请求携带的todayDate还是初始空值,如果需要携带更新后的日期发起请求,可以把axios调用逻辑放到上述setState的回调函数中。
- 日期绑定错误导致看不到状态生效的效果
你在渲染送达时间选择框时,min属性写的是min={this.tdayDate},这里的this.tdayDate是不存在的——tdayDate只是getDates函数内部的局部变量,没有挂载到组件实例上。你已经在render开头从state中解构出了todayDate,直接把min属性改为min={todayDate}即可正确读取state中的值。
额外优化建议
JS中Date.getMonth()返回的数值范围是0~11,0对应1月、11对应12月,你直接拼接的话月份会比实际月份小1,需要改成new Date().getMonth() + 1才能拿到正确的月份值。
内容的提问来源于stack exchange,提问作者user14800407
相关产品推荐
相关产品推荐

