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

时间:2018-01-30 18:18:29

标签: javascript ajax object setinterval

这是设置。在上一个问题中,我发现我可以通过子组件中的状态传递对象属性,然后使用componentDidUpdate获取该对象属性。在这种情况下,状态和道具都被称为到达。

这是基本代码......

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);

}

为什么我可以在将它放入setInterval之后访问this.props.arrival,但不能在它之外?

1 个答案:

答案 0 :(得分:1)

然而,我可能完全错了:我相信你的问题是基于一个React孩子无法判断它是否是'道具已更新或未更新,这导致组件不重新渲染(因此继承道具)。 但是,使用setInterval确实会使组件更新每x秒的数量。 尝试使用下面的componentDidUpdate将道具设置为子组件中的状态,看看它是否有效

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