Javascript 为什么我*只能*访问setInterval内的对象属性?

Javascript 为什么我*只能*访问setInterval内的对象属性?,javascript,ajax,object,setinterval,Javascript,Ajax,Object,Setinterval,这是设置。在前面的问题中,我发现我可以通过子组件中的状态传递对象属性,然后使用componentDidUpdate获取该对象属性。在这种情况下,state和prop都称为arrival 这是基本代码 export default class App extends Component { constructor(){ super(); this.state = { arrival: {} } } axiosFunc = () => { ax

这是设置。在前面的问题中,我发现我可以通过子组件中的状态传递对象属性,然后使用componentDidUpdate获取该对象属性。在这种情况下,state和prop都称为arrival

这是基本代码

export default class App extends Component {
constructor(){
    super();
    this.state = {
        arrival: {}
    }
}

axiosFunc = () => {
    axios.get('https://api.warframestat.us/pc').then(results => {
        this.setState({
            arrival: results.data.voidTrader.activation,
        });
        setTimeout(this.axiosFunc,1000 * 60);
    })
}

componentDidMount() {
    this.axiosFunc();
}

}
现在在子组件中,我无法访问像这样的到达道具

componentDidMount(){
console.log(this.props.arrival)
}
但我可以把它放在componentDidUpdate中。我还意识到我可以将它放在setInterval中,然后在componentDidMount中运行该setInterval

componentDidMount() {

this.intervalFunc = setInterval(() => {
console.log(this.props.arrival);
}
  , 1000);
}


为什么我可以在将this.props.arrival放在setInterval内部而不是外部之后访问它?

我可能完全错了,但是:我相信您的问题是基于这样一个事实,即React子级无法判断其道具是否已更新,这会导致组件未重新渲染,从而继承道具。 但是,使用setInterval会使组件每隔x秒更新一次。 尝试使用componentDidUpdate(如下所示)将道具设置为子组件中的状态,看看它是否有效

componentDidUpdate(prevProps) {
  if (prevProps !== this.props) {
    this.setState({arrival: this.props.arrival});
  }
}

setInterval内的函数第一次被调用是在1000毫秒之后。可能props有值,而不是在此之前。您的arrival属性是在promise的回调中设置的。在第一个间隔运行时,承诺已得到解决,但在页面加载期间任何代码同步运行期间,承诺都不会得到解决。