2016-09-27 49 views
0

我有几个React容器和组件完美运行,但我仍在学习和学习React。当我的函数componentDidMount运行在我正在处理的新组件中时,看起来组件所需的所有数据都可用于组件,但this.props.loading设置为true;反应:什么控制this.props.loading的价值?

componentDidMount() { 
    const a = 100; //breakpoint here 
    if (this.props.loading === false){ 
     const {myDataID} = this.props; 
     this.fromID = Meteor.userId(); 
     this.toID = myDataID; 

     this.subscribe(fromID, toID); 
    } 
} 

什么控制着this.props.loading的值?如果this.props.loading设置为false,componentDidMount会再次运行吗?

回答

1

propthis.props.loading由父组件设置。如果您觉得您的组件拥有所有执行渲染你需要检查,如果this.props.loadingtruefalse必要的数据。这是一个很好的做法,因为有些时候由于网络错误,您可能无法获得所需的数据。这会破坏你的代码。

componentDidMount将渲染功能完成

调用一次,后两者在客户端和服务器上,初步呈现发生之前只能被调用一次。如果你在这个方法中调用setState,render()将会看到更新的状态,并且只会在状态改变时执行一次。

但是,当你改变loading道具父,componentWillReceiveProps将与nexProp被称为,这是你的变化。

欲了解更多信息,check here

1

什么控制在this.props.loading价值?

正在呈现该组件的组件。即如果此componentDidMount方法是在一个组件Bar,并且在Foorender法:loading

render() { 
    return <Bar loading={computeLoadingState()} /> 
} 

每次Foo被重新呈现,Bar潜在地传递新的值。

componentDidMount再次运行如果this.props.loading设置为false?

号的documentation说:

调用一次,只有客户端(而不是服务器)上,立即出现在最初的渲染之后。

Other methods然而,每当道具改变时都会调用它。