2017-03-13 23 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

非常多明顯的例子,謝謝。 –