Mobx-React store 属性 undefined on first render,但异步加载变量通过

Mobx-React store property undefined on first render, but async loading variable passes

我正在使用 Mobx 管理我的状态。我为 http 请求调用一个动作来加载图片,然后更新图片 属性,然后更新加载 属性。当我加载进行调用的组件和 console.log 存储属性时,加载 属性 已更新,但图片 属性 仍未定义。直到组件的第二次render,才定义图片属性 下面是一个例子:

export class PhotoStore {
@observable picInfo = []
@observable loading = true

@action loadPics() {
this.loading = true;
let dataURL = 'some url';
return axios.get(dataURL)
.then(res => {this.picInfo = res.data})
.then(this.loading = false)
}

class PhotoGallery extends React.Component{
 componentWillMount(){
  this.PhotoStore.loadPics();
}
 render(){
console.log(//these two properties)
//returns false and undefined object
  return(
//some code
 );
}

}

我知道我可以在渲染 JSX 之前检查 picInfo.length,但我想让它工作。感谢您提前提供任何提示!

您不需要第二个 .then 子句。当您设置 this.picInfo 时,还设置 this.loading。因为您将加载状态更改放在链式承诺中,所以存在时间问题,@observable 会在设置加载之前尝试评估。

https://mobx.js.org/best/actions.html - 参见 runInActionasyncAction 装饰器

@action loadPics() {
  this.loading = true;
  let dataURL = 'some url';
  return axios.get(dataURL)
    .then(res => {runInAction(() => {this.picInfo = res.data})}
    .then(runInAction(() =>this.loading = false))
}