Home Web Front-end JS Tutorial Use React to render components to specified DOM nodes

Use React to render components to specified DOM nodes

Apr 18, 2018 am 11:51 AM
react designation rendering

This time I will bring you the precautions of using React to render components to the specified DOM node and using React to render the component to the specified DOM node. The following is a practical case. , let’s take a look.

As we all know, one of the advantages of React is that its API is particularly simple. By returning the basic structure of a component through the render method, just like a simple function, you can get a reusable react component. But sometimes there are still some restrictions, especially in its API, which cannot control the DOM node that the component should be rendered to, which makes it difficult to control some elastic layer components. The problem will arise when the parent element is set to <a href="http://www.php.cn/wiki/923.html" target="_blank">overflow</a>:hidden .

For example, it looks like this:

The effect we actually expect is this:

Fortunately, there is a fairly elegant, although not obvious, way to get around this problem. The first react function we learned is the render method, and its function signature is like this:

1

2

3

4

5

ReactComponent render(

 ReactElement element,

 DOMElement container,

 [function callback]

)

Copy after login

Normally we use this method to render the entire application into a DOM node. The good news is that the method doesn't stop there. We can use the ReactDom.render method in one component to render another component into a specified DOM element. As a component's render method, it must be pure (for example: it cannot change state or interact with the DOM). So we need to call the ReactDom.render method in componentDidUpdate or componentDidMount.

In addition, we need to ensure that when the parent element is unloaded, the modified component will also be unloaded.

After sorting it out, we get the following component:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

import React,{Component} from 'react';

import ReactDom from 'react-dom';

export default class RenderInBody extends Component{

 constructor(p){

  super();

 }

 componentDidMount(){//新建一个p标签并塞进body

  this.popup = document.createElement("p");

  document.body.appendChild(this.popup);

  this._renderLayer();

 }

 componentDidUpdate() {

  this._renderLayer();

 }

 componentWillUnmount(){//在组件卸载的时候,保证弹层也被卸载掉

  ReactDom.unmountComponentAtNode(this.popup);

  document.body.removeChild(this.popup);

 }

 _renderLayer(){//将弹层渲染到body下的p标签

  ReactDom.render(this.props.children, this.popup);

 }

 render(){

  return null;

 }

}

Copy after login

To sum up:

Manually insert a p tag into the body during componentDidMount, and then use ReactDom.render to render the component to the p tag

When we want to render a component directly to the body, we only need to wrap a layer of RenderInBody around the component.

1

2

3

4

5

6

7

export default class Dialog extends Component{

 render(){

  return {

   <RenderInBody>i am a dialog render to body</RenderInBody>

  }

 }

}

Copy after login

Translator added:

By transforming the above components, we can render and unload the components to the specified dom node, and add position control, as follows:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

//此组件用于在body内渲染弹层

import React,{Component} from 'react'

import ReactDom from 'react-dom';

export default class RenderInBody extends Component{

 constructor(p){

  super(p);

 }

 componentDidMount(){

  /**

  popupInfo={

   rootDom:***,//接收弹层组件的DOM节点,如document.body

   left:***,//相对位置

   top:***//位置信息

  }

  */

  let {popupInfo} = this.props; 

  this.popup = document.createElement('p');

  this.rootDom = popupInfo.rootDom;  

  this.rootDom.appendChild(this.popup);

  //we can setAttribute of the p only in this way

  this.popup.style.position='absolute';

  this.popup.style.left=popupInfo.left+'px';

  this.popup.style.top=popupInfo.top+'px';

  this._renderLayer()

 }

 componentDidUpdate() {

  this._renderLayer();

 }

 componentWillUnmount(){

  this.rootDom.removeChild(this.popup);

 }

 _renderLayer(){

  ReactDom.render(this.props.children, this.popup);

 }

 render(){

  return null;

 }

}

Copy after login

Note: Position acquisition and root node judgment function

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

export default (dom,classFilters)=> {

 let left = dom.offsetLeft,

  top = dom.offsetTop + dom.scrollTop,

  current = dom.offsetParent,

  rootDom = accessBodyElement(dom);//默认是body

 while (current !=null ) {

  left += current.offsetLeft;

  top += current.offsetTop;

  current = current.offsetParent;

  if (current && current.matches(classFilters)) {

   rootDom = current;

   break;

  }

 }

 return { left: left, top: top ,rootDom:rootDom};

}

/***

1. dom:为响应弹层的dom节点,或者到该dom的位置后,可以做位置的微调,让弹层位置更佳合适

*

2. classFilters:需要接收弹层组件的DOM节点的筛选类名

/

Copy after login

I believe you have mastered the method after reading the case in this article. For more exciting information, please pay attention to other related articles on the PHP Chinese website!

Recommended reading:

JS implementation of images being dragged on web pages

What is the life cycle of React Native components?

The above is the detailed content of Use React to render components to specified DOM nodes. For more information, please follow other related articles on the PHP Chinese website!

Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn

Hot AI Tools

Undresser.AI Undress

Undresser.AI Undress

AI-powered app for creating realistic nude photos

AI Clothes Remover

AI Clothes Remover

Online AI tool for removing clothes from photos.

Undress AI Tool

Undress AI Tool

Undress images for free

Clothoff.io

Clothoff.io

AI clothes remover

Video Face Swap

Video Face Swap

Swap faces in any video effortlessly with our completely free AI face swap tool!

Hot Tools

Notepad++7.3.1

Notepad++7.3.1

Easy-to-use and free code editor

SublimeText3 Chinese version

SublimeText3 Chinese version

Chinese version, very easy to use

Zend Studio 13.0.1

Zend Studio 13.0.1

Powerful PHP integrated development environment

Dreamweaver CS6

Dreamweaver CS6

Visual web development tools

SublimeText3 Mac version

SublimeText3 Mac version

God-level code editing software (SublimeText3)

Hot Topics

Java Tutorial
1659
14
PHP Tutorial
1258
29
C# Tutorial
1232
24
How to render orthogonal top view in Kujiale_Tutorial on rendering orthogonal top view in Kujiale How to render orthogonal top view in Kujiale_Tutorial on rendering orthogonal top view in Kujiale Apr 02, 2024 pm 01:10 PM

1. First open the design plan to be rendered in Kujiale. 2. Then open top view rendering under the rendering menu. 3. Then click Orthogonal in the parameter settings in the top view rendering interface. 4. Finally, after adjusting the model angle, click Render Now to render the orthogonal top view.

PHP, Vue and React: How to choose the most suitable front-end framework? PHP, Vue and React: How to choose the most suitable front-end framework? Mar 15, 2024 pm 05:48 PM

PHP, Vue and React: How to choose the most suitable front-end framework? With the continuous development of Internet technology, front-end frameworks play a vital role in Web development. PHP, Vue and React are three representative front-end frameworks, each with its own unique characteristics and advantages. When choosing which front-end framework to use, developers need to make an informed decision based on project needs, team skills, and personal preferences. This article will compare the characteristics and uses of the three front-end frameworks PHP, Vue and React.

Integration of Java framework and front-end React framework Integration of Java framework and front-end React framework Jun 01, 2024 pm 03:16 PM

Integration of Java framework and React framework: Steps: Set up the back-end Java framework. Create project structure. Configure build tools. Create React applications. Write REST API endpoints. Configure the communication mechanism. Practical case (SpringBoot+React): Java code: Define RESTfulAPI controller. React code: Get and display the data returned by the API.

Vue.js vs. React: Project-Specific Considerations Vue.js vs. React: Project-Specific Considerations Apr 09, 2025 am 12:01 AM

Vue.js is suitable for small and medium-sized projects and fast iterations, while React is suitable for large and complex applications. 1) Vue.js is easy to use and is suitable for situations where the team is insufficient or the project scale is small. 2) React has a richer ecosystem and is suitable for projects with high performance and complex functional needs.

React's Role in HTML: Enhancing User Experience React's Role in HTML: Enhancing User Experience Apr 09, 2025 am 12:11 AM

React combines JSX and HTML to improve user experience. 1) JSX embeds HTML to make development more intuitive. 2) The virtual DOM mechanism optimizes performance and reduces DOM operations. 3) Component-based management UI to improve maintainability. 4) State management and event processing enhance interactivity.

Triggering reflows and repaints: why are they important? Triggering reflows and repaints: why are they important? Jan 26, 2024 am 08:43 AM

Reflow and redraw: why are they important? With the development of the Internet, more and more people are browsing the web and using mobile applications online. For developers, how to improve the performance of web pages and applications has become one of the important topics. In the process of optimizing these applications, reflow and redrawing are two aspects that must be focused on. This article will detail the concepts of reflow and redraw and why they are so important for performance optimization. Reflow and redraw are key steps for the browser rendering engine to display the page. Reflow refers to when the rendering engine sends

React vs. Vue: Which Framework Does Netflix Use? React vs. Vue: Which Framework Does Netflix Use? Apr 14, 2025 am 12:19 AM

Netflixusesacustomframeworkcalled"Gibbon"builtonReact,notReactorVuedirectly.1)TeamExperience:Choosebasedonfamiliarity.2)ProjectComplexity:Vueforsimplerprojects,Reactforcomplexones.3)CustomizationNeeds:Reactoffersmoreflexibility.4)Ecosystema

React and the Frontend: Building Interactive Experiences React and the Frontend: Building Interactive Experiences Apr 11, 2025 am 12:02 AM

React is the preferred tool for building interactive front-end experiences. 1) React simplifies UI development through componentization and virtual DOM. 2) Components are divided into function components and class components. Function components are simpler and class components provide more life cycle methods. 3) The working principle of React relies on virtual DOM and reconciliation algorithm to improve performance. 4) State management uses useState or this.state, and life cycle methods such as componentDidMount are used for specific logic. 5) Basic usage includes creating components and managing state, and advanced usage involves custom hooks and performance optimization. 6) Common errors include improper status updates and performance issues, debugging skills include using ReactDevTools and Excellent

See all articles