class App extends Component {componentDidMount() {console.log('app componentDidMount');}componentWillMount(){console.log('app componentWillMount');}render() {return (<div id='appId'>app 合并测试<span>自己做的选择 <i>深入一层,触发complete</i></span><AL/><BL/></div>);}}class Al extends React.Component{componentDidMount(){console.log('AL componentDidMount')}componentWillMount(){console.log('AL componentWillMount')}render(){return <div>al</div>}}class BL extends React.Component{componentDidMount(){console.log('BL componentDidMount');}componentWillMount(){console.log('BL componentWillMount');}render(){return <div>Bl</div>}}
主要是看 componentWillMount 和 componentDidMount 的执行先后顺序,此处不考虑代码的优雅等。打印如下:
// app componentWillMount// AL componentWillMount// BL componentWillMount// AL componentDidMount// BL componentDidMount// app componentDidMount
调整代码的顺序如下:打印如下:
class App extends Component {componentDidMount() {console.log('app componentDidMount');}componentWillMount(){console.log('app componentWillMount');}render() {return (<div id='appId'>app 合并测试<span>自己做的选择 <i>深入一层,触发complete</i></span><AL><BL/></AL></div>);}}class Al extends React.Component{componentDidMount(){console.log('AL componentDidMount')}componentWillMount(){console.log('AL componentWillMount')}render(){return <div>al{this.props.children}</div>}}
打印如下:
// app componentWillMount// AL componentWillMount// BL componentWillMount// BL componentDidMount// AL componentDidMount// app componentDidMount
componentWillMount 是根据workLoop执行方式。componentDidMount 则先执行 BL。
这个和链表的执行有关。
