React-生命周期

2020-08-25  本文已影响0人  zhulichao

学了React快一年了,现在用的已经比较顺手了,单个组件的生命周期执行过程已经很清楚了,但是关于多个组件之间怎么进入生命周期方法的还是不确定,现在好好学习一下。

单个组件的生命周期过程

组件的生命周期函数按如下顺序执行,每个方法的说明如下:

单个组件的生命周期过程

多个组件的生命周期过程

父组件每次执行过setState更新了state后,无论state内容是否发生变化,都会进行所有子孙组件的重新渲染。

先进入父组件的componentWillUnmount,再进入子组件的componentWillUnmount,就像先进入父组件的componentWillUpdate,再进入子组件的componentWillUpdate一样,只是React没有componentDidUnmount方法,看不到是先卸载子组件完成,再卸载父组件完成的。

初始化g 更新 卸载

forceUpdate函数

forceUpdate函数不是组件的生命周期函数,组件通过调用this.forceUpdate()可以强制进行组件的重新渲染,并且会连带所有子组件都重新渲染。通过这种方式的重新渲染,不会进入本组件shouldComponentUpdate方法,会进入子组件的shouldComponentUpdate和componentWillReceiveProps方法及其它生命周期方法。

forceUpdate操作

HOC(High Order Component )高阶组件

参考初识React中的High Order Component
HOC是一个抽象和公用代码的方案,它接受一个包含共用逻辑或者是状态的ReactComponent,并返回一个包含特定逻辑或者是状态的新ReactComponent,相当于对原组件做了一层包装,react-redux中的connect就算是HOC。组件的生命周期执行顺序与父子组件类型的执行顺序一样。

class App extends React.Component {
    constructor(props) {
      super(props);
      this.state = {
        value: '',
      };
    }
    render() {
      return (
        <input ref="app" value={this.state.value} onChange={this.onChange}/>
      );
    }
};
const connect = (mapStateFromStore) => (WrappedComponent) => {
    class InnerComponent extends React.Component {
      constructor(props) {
        super(props);
      }
      render () {console.log(this)
        return (
          <WrappedComponent ref="middle" />
        );
      }
    }
    // 将新组件返回
    return InnerComponent;
}
const HOC = connect(() => ({}))(App);

class Root extends React.Component {
    render() {console.log(this)
      return (
        <div>
          <HOC ref="hoc"/>
        </div>
      );
    }
}

ReactDOM.render(
    <Root />,
    document.getElementById('example')
);
HOC的ref结构 HOC渲染出的DOM结构
上一篇下一篇

猜你喜欢

热点阅读