1. class App extends Component {
    2. componentDidMount() {
    3. console.log('app componentDidMount');
    4. }
    5. componentWillMount(){
    6. console.log('app componentWillMount');
    7. }
    8. render() {
    9. return (
    10. <div id='appId'>
    11. app 合并测试
    12. <span>自己做的选择 <i>深入一层,触发complete</i></span>
    13. <AL/>
    14. <BL/>
    15. </div>
    16. );
    17. }
    18. }
    19. class Al extends React.Component{
    20. componentDidMount(){
    21. console.log('AL componentDidMount')
    22. }
    23. componentWillMount(){
    24. console.log('AL componentWillMount')
    25. }
    26. render(){
    27. return <div>al</div>
    28. }
    29. }
    30. class BL extends React.Component{
    31. componentDidMount(){
    32. console.log('BL componentDidMount');
    33. }
    34. componentWillMount(){
    35. console.log('BL componentWillMount');
    36. }
    37. render(){
    38. return <div>Bl</div>
    39. }
    40. }

    主要是看 componentWillMount 和 componentDidMount 的执行先后顺序,此处不考虑代码的优雅等。打印如下:

    1. // app componentWillMount
    2. // AL componentWillMount
    3. // BL componentWillMount
    4. // AL componentDidMount
    5. // BL componentDidMount
    6. // app componentDidMount

    调整代码的顺序如下:打印如下:

    1. class App extends Component {
    2. componentDidMount() {
    3. console.log('app componentDidMount');
    4. }
    5. componentWillMount(){
    6. console.log('app componentWillMount');
    7. }
    8. render() {
    9. return (
    10. <div id='appId'>
    11. app 合并测试
    12. <span>自己做的选择 <i>深入一层,触发complete</i></span>
    13. <AL>
    14. <BL/>
    15. </AL>
    16. </div>
    17. );
    18. }
    19. }
    20. class Al extends React.Component{
    21. componentDidMount(){
    22. console.log('AL componentDidMount')
    23. }
    24. componentWillMount(){
    25. console.log('AL componentWillMount')
    26. }
    27. render(){
    28. return <div>al{this.props.children}</div>
    29. }
    30. }

    打印如下:

    1. // app componentWillMount
    2. // AL componentWillMount
    3. // BL componentWillMount
    4. // BL componentDidMount
    5. // AL componentDidMount
    6. // app componentDidMount

    componentWillMount 是根据workLoop执行方式。componentDidMount 则先执行 BL。

    这个和链表的执行有关。