Analysis of React Source Code (2): types and Lifecycle of components

April 10, 2023 1304hotness 0likes 0comments

in the previous article "React source code parsing (1): component implementation and mounting , we described the implementation and mounting of React components. Now let's explore the life cycle of components.

We already know that the lifecycle of the component will be triggered only after the mount process starts, and a js object of type ReactElement will be generated. By parsing the information contained in the component object, the corresponding HTML information is obtained, inserted into the specified DOM container, and the rendering of the view is finally completed. So how is the life cycle of the component triggered in this process?

in fact, the study of the declaration cycle of components is a more in-depth study of the mounting process of components.

Lifecycle of components

at the end of the previous article, we know that the ReactDOM.render () method internally generates four different types of wrapper components through the factory method, depending on the parameters passed in:

  • ReactEmptyComponent
  • ReactTextComponent
  • ReactDOMComponent
  • ReactCompositeComponent

when executing the mount process, the lifecycle is triggered by executing mountComponent methods within each encapsulated component, but it is clear that the lifecycle exists only in the React custom component, that is, ReactCompositeComponent . Because the other three components do not have a lifecycle, let's first analyze the relatively easy three internal components that do not exist lifecycle.

1.ReactEmptyComponent

is created by the ReactEmptyComponent.create () method, which finally calls the ReactDOMEmptyComponent method. Take a look at the source code:

because the component is empty, almost all parameters are set to null and have nothing to do with the life cycle, only the mounting and unloading of the component. In the key method mountComponent , we see that the final return is the HTML in the form of & LTTITITY, which is empty, that is, empty, so that the real DOM is also empty.

2.ReactTextComponent

created by ReactHostComponent.createInstanceForText () method, we can just look at mountComponent :

The processing of ReactDOMTextComponent is slightly more complicated than that of ReactDOMEmptyComponent , but the logic is roughly the same. The escapeTextContentForBrowser method performs space checking on the parameters, and finally converts the parameters to a string and returns them through a simple ''+ parameter method.

3.ReactDOMComponent

is created by ReactHostComponent.createInternalComponent () method. Similarly, let's just look at mountComponent directly:

because the dom element also has no life cycle, ReactDOMComponent will identify and process the passed div , span and other tags through switch . In addition, the process is basically the same as the above two types of components.

4.ReactCompositeComponent

The custom component is the focus of the React component. It is created by the ReactCompositeComponentWrapper () method, and finally the HTML of the component is created by calling the ReactCompositeComponentMixin.mountComponent method. As the function is very long, interested readers please go to ReactCompositeComponent.js to read the source code.

based on the above, you can see that the purpose of lifecycle execution is to parse ReactElement to get HTML. As a result, we update the summary table of the four component types in the previous article:

nextElement actual parameters result
null / false empty create ReactDOMEmptyComponent component
object & & type = = string Virtual DOM create ReactDOMComponent component
object & & type! = string React components create ReactCompositeComponent component
string string create ReactDOMTextComponent component
number numbers create ReactDOMTextComponent component
InterServer Web Hosting and VPS

Aaron

Hello, my name is Aaron and I am a freelance front-end developer

Comments