2017-03-13 24 views
1

说,例如我有以下三个部分组成:在React中,componentDidMount何时会触发不直接呈现标记的组件?

ComponentA:这使得实际的标记

ComponentB:其中通过一些道具来ComponentA并使得它

ComponentC:其中通过一些道具来ComponentB和呈现它

我明白当componentDidMount将触发组件,直接输出标记(它会触发时erated标记被附加到DOM),但是呈现非标记组件的组件又如何呢?他们的componentDidMount何时开火?

在上面的例子中,3个组件的componentDidMount的火顺序是什么?

回答

2

即使组件未显式呈现标记,组件仍将调用componentDidMount。在你的例子,

从反应文档:

componentWillMount()被安装发生之前立即被调用。它在render()之前被调用...

即使组件要渲染为null,它仍然必须在经过正常生命周期并且它仍然“挂载”后才能确定。它们仍然是组件并且行为方式相同。我喜欢考虑每个组件呈现标记,因为它有一个子组件(或者它返回null,这不会影响生命周期)。

componentDidMount的顺序将是A,B,C具有以下:

例如:JSBIN

class A extends React.Component { 
    componentDidMount() { 
    console.log('A'); 
    } 

    render() { 
    return <div>AHHH IT IS A</div> 
    } 
} 

class B extends React.Component { 
    componentDidMount() { 
    console.log('B'); 
    } 

    render() { 
    return <A someProps={'SomeProps'}/> 
    } 
} 

class C extends React.Component { 
    componentDidMount() { 
    console.log('C'); 
    } 

    render() { 
    return <B someProps={'SomeProps'}/> 
    } 
} 

ReactDOM.render(
    <C />, 
    document.getElementById('root') 
); 
+0

非常多明显的例子,谢谢。 –