Education
Developer Advocate
Last updated onOct 27, 2023
Last updated onSep 26, 2023
ReactDOM.render is a method provided by the React DOM package for rendering React elements into a DOM node. It is the most common way to display React components on a web page. This method takes two arguments: the first is the React element you want to render, and the second is the DOM node where you want to render the element.
Here is a simple example of how ReactDOM.render is used:
1 import React from 'react'; 2 import ReactDOM from 'react-dom'; 3 4 const App = () => { 5 return ( 6 <div> 7 <h1>Hello, world!</h1> 8 </div> 9 ); 10 }; 11 12 ReactDOM.render(<App />, document.getElementById('root')); 13
In the above code, the App component is rendered into the DOM node with the id 'root'. This is a common pattern in React applications, where a single root DOM node serves as the entry point for a React app.
ReactDOM.render plays a crucial role in React. It is responsible for taking a React element or a React component and rendering it into the DOM. This process involves creating DOM elements and attributes, setting event handlers, and managing updates when data changes.
The ReactDOM.render method is also responsible for diffing, a process where React compares the current DOM with the new virtual DOM to determine the most efficient way to update the DOM. This is a key part of React's performance optimizations.
1 import React from 'react'; 2 import ReactDOM from 'react-dom'; 3 4 const App = () => { 5 return ( 6 <div> 7 <h1>Hello, world!</h1> 8 </div> 9 ); 10 }; 11 12 ReactDOM.render(<App />, document.getElementById('root')); 13
In the above example, ReactDOM.render is used to render the App component into the DOM. The render method creates a new instance of the App component, calls its render method, and then updates the DOM to match the rendered output.
The render method in a React component and the ReactDOM.render function are two different things. The render method in a React component is a required method that returns a React element. This React element describes what should be rendered on the screen.
On the other hand, ReactDOM.render is a function provided by the ReactDOM library. It is used to render a React element into a DOM node. The ReactDOM.render function is usually called once in a React application, in the root JavaScript file.
Here is an example to illustrate the difference:
1 import React from 'react'; 2 import ReactDOM from 'react-dom'; 3 4 class App extends React.Component { 5 render() { 6 return <h1>Hello, world!</h1>; 7 } 8 } 9 10 ReactDOM.render(<App />, document.getElementById('root')); 11
In the above code, the render method in the App component returns a React element (the h1 element). The ReactDOM.render function then takes this React element and renders it into the DOM node with the id 'root'.
The render method in a React component and the Document Object Model (DOM) have a close relationship. The render method returns a description of what the component's DOM representation should look like. This description is in the form of a React element or a tree of React elements.
The ReactDOM library then takes this description and updates the actual DOM to match it. This process is known as reconciliation and is a key part of how React updates the UI efficiently.
Here's an example of a render method returning a tree of React elements:
1 import React from 'react'; 2 3 class App extends React.Component { 4 render() { 5 return ( 6 <div> 7 <h1>Hello, world!</h1> 8 <p>Welcome to my app.</p> 9 </div> 10 ); 11 } 12 } 13
In the above code, the render method in the App component returns a div element containing an h1 and a p element. This is a description of what the component's DOM representation should look like.
In modern React (React 16 and onwards), ReactDOM.render is still used, but it is no longer the only way to render a React component into the DOM. React 16 introduced a new feature called "Fragments" that allows you to return multiple elements from a component's render method without having to wrap them in a single root element.
Moreover, React 18, the upcoming major release of React, is introducing a new root API that will eventually replace ReactDOM.render. This new API provides more control over when and how components are rendered, making it easier to integrate React with non-React code and improving the performance of concurrent rendering.
Despite these changes, ReactDOM.render remains a fundamental part of React and understanding how it works is crucial for any React developer.
React 18 introduces a new root API that is set to replace ReactDOM.render. The new API allows you to create a root with ReactDOM.createRoot and then render a component with root.render.
Here's an example of how to use the new root API:
1 import React from 'react'; 2 import ReactDOM from 'react-dom'; 3 4 const App = () => { 5 return ( 6 <div> 7 <h1>Hello, world!</h1> 8 </div> 9 ); 10 }; 11 12 const root = ReactDOM.createRoot(document.getElementById('root')); 13 root.render(<App />); 14
In the above code, ReactDOM.createRoot is used to create a root, and then root.render is used to render the App component. This new API provides more control over when and how components are rendered, and it is expected to be the standard way to render React components in the future.
In addition to the render method, ReactDOM also provides a hydrate method. The hydrate method is used for rendering components on the client side that were rendered on the server side. This process is known as server-side rendering (SSR).
The hydrate method is similar to the render method, but it is used to "hydrate" a container whose HTML contents were rendered by ReactDOMServer. Hydration means that React will attach event listeners to the existing markup, allowing it to respond to user interactions.
Here's an example of how to use ReactDOM.hydrate:
1 import React from 'react'; 2 import ReactDOM from 'react-dom'; 3 4 const App = () => { 5 return ( 6 <div> 7 <h1>Hello, world!</h1> 8 </div> 9 ); 10 }; 11 12 ReactDOM.hydrate(<App />, document.getElementById('root')); 13
In the above code, ReactDOM.hydrate is used to hydrate the DOM node with the id 'root'. This would be used in a scenario where the App component was initially rendered on the server, and then the client-side React code needs to attach event listeners to the existing markup.
Using ReactDOM.render is straightforward. It requires two arguments: the first is the React element or component you want to render, and the second is the DOM node where you want to render the element or component.
Here's an example:
1 import React from 'react'; 2 import ReactDOM from 'react-dom'; 3 4 const App = () => { 5 return ( 6 <div> 7 <h1>Hello, world!</h1> 8 </div> 9 ); 10 }; 11 12 ReactDOM.render(<App />, document.getElementById('root')); 13
In the above code, the App component is rendered into the DOM node with the id 'root'. This is a common pattern in React applications, where a single root DOM node serves as the entry point for a React app.
Rendering a React component to the DOM involves creating an instance of the component and calling its render method. The render method returns a React element, which is a description of what the component's DOM representation should look like.
ReactDOM then takes this React element and updates the actual DOM to match it. This process is known as reconciliation and is a key part of how React updates the UI efficiently.
Here's an example of how to render a React component to the DOM:
1 import React from 'react'; 2 import ReactDOM from 'react-dom'; 3 4 class App extends React.Component { 5 render() { 6 return <h1>Hello, world!</h1>; 7 } 8 } 9 10 ReactDOM.render(<App />, document.getElementById('root')); 11
In the above code, the App component is rendered into the DOM node with the id 'root'. The ReactDOM.render function creates a new instance of the App component, calls its render method, and then updates the DOM to match the rendered output.
Rendering a React element involves creating a representation of the element in the virtual DOM and then updating the actual DOM to match this representation. This process is handled by ReactDOM, which provides the render method for rendering React elements into a DOM node.
A React element is a plain object that describes a component instance or DOM node and its desired properties. It is not an actual instance of a component or a DOM node, but rather a way to tell React what you want to see on the screen.
Here's an example of rendering a React element:
1 import React from 'react'; 2 import ReactDOM from 'react-dom'; 3 4 const element = <h1>Hello, world!</h1>; 5 6 ReactDOM.render(element, document.getElementById('root')); 7
In the above code, a React element is created with the JSX expression
Rendering a React element in HTML involves using ReactDOM.render to render the element into a DOM node. The DOM node can be any valid HTML element, such as a div, section, or main element.
Here's an example:
1 import React from 'react'; 2 import ReactDOM from 'react-dom'; 3 4 const element = <h1>Hello, world!</h1>; 5 6 ReactDOM.render(element, document.getElementById('root')); 7
In the above code, a React element is created with the JSX expression
In React, you can pass properties (props) to elements when they are created. These props can then be accessed within the component to control its behavior and render output.
Here's an example of rendering an element with props:
1 import React from 'react'; 2 import ReactDOM from 'react-dom'; 3 4 const Welcome = (props) => { 5 return <h1>Hello, {props.name}!</h1>; 6 }; 7 8 const element = <Welcome name="World" />; 9 10 ReactDOM.render(element, document.getElementById('root')); 11
In the above code, the Welcome component is a function that takes props as an argument and returns a React element. This element is then rendered into the DOM node with the id 'root' using ReactDOM.render. The props object contains the properties passed to the element when it was created.
In React, the terms 'render' and 'return' have specific meanings. The render method in a React component is a required method that returns a React element. This React element describes what should be rendered on the screen.
On the other hand, the return statement in a function or method is a JavaScript keyword that specifies the value to be returned by the function or method. In the context of a React component's render method, the return statement specifies the React element that should be rendered.
Here's an example to illustrate the difference:
1 import React from 'react'; 2 3 class App extends React.Component { 4 render() { 5 return <h1>Hello, world!</h1>; 6 } 7 } 8
In the above code, the render method in the App component returns a React element (the h1 element). The return statement specifies this React element as the value to be returned by the render method.
React 18 introduces a new root API that is set to replace ReactDOM.render. The new API allows you to create a root with ReactDOM.createRoot and then render a component with root.render.
Here's an example of how to use the new root API:
1 import React from 'react'; 2 import ReactDOM from 'react-dom'; 3 4 const App = () => { 5 return ( 6 <div> 7 <h1>Hello, world!</h1> 8 </div> 9 ); 10 }; 11 12 const root = ReactDOM.createRoot(document.getElementById('root')); 13 root.render(<App />); 14
In the above code, ReactDOM.createRoot is used to create a root, and then root.render is used to render the App component. This new API provides more control over when and how components are rendered, and it is expected to be the standard way to render React components in the future.
In React 18, ReactDOM.createRoot and root.render are the new alternatives to ReactDOM.render. These new methods provide more control over when and how components are rendered, making it easier to integrate React with non-React code and improving the performance of concurrent rendering.
Here's an example of how to use ReactDOM.createRoot and root.render:
1 import React from 'react'; 2 import ReactDOM from 'react-dom'; 3 4 const App = () => { 5 return ( 6 <div> 7 <h1>Hello, world!</h1> 8 </div> 9 ); 10 }; 11 12 const root = ReactDOM.createRoot(document.getElementById('root')); 13 root.render(<App />); 14
In the above code, ReactDOM.createRoot is used to create a root, and then root.render is used to render the App component. This is the new standard way to render React components in React 18 and onwards.
ReactDOM.render has been a fundamental part of React since its inception. It is the method that takes a React element or component and renders it into a specified DOM node. It has been instrumental in making React a popular choice for building user interfaces.
Despite the introduction of new APIs in React 18, ReactDOM.render will continue to work in React 18 for the foreseeable future. The React team has committed to providing a gradual upgrade path, and ReactDOM.render will not be removed until there are easy-to-follow migration steps for all use cases.
The future of rendering in React is concurrent. With the introduction of React 18, the React team is making it easier to use concurrent features in your React apps. The new root API, which includes ReactDOM.createRoot and root.render, is a big part of this.
Concurrent rendering allows React to work on multiple tasks at once without blocking the main thread. This can lead to smoother animations, better responsiveness, and generally a better user experience.
Here's an example of how to use the new root API in React 18:
1 import React from 'react'; 2 import ReactDOM from 'react-dom'; 3 4 const App = () => { 5 return ( 6 <div> 7 <h1>Hello, world!</h1> 8 </div> 9 ); 10 }; 11 12 const root = ReactDOM.createRoot(document.getElementById('root')); 13 root.render(<App />); 14
In the above code, ReactDOM.createRoot is used to create a root, and then root.render is used to render the App component. This is the new standard way to render React components in React 18 and onwards.
ReactDOM.render has been a fundamental part of React since its inception. It is the method that takes a React element or component and renders it into a specified DOM node. Over the years, it has served developers well, enabling them to build complex user interfaces with ease.
With the introduction of React 18, the rendering process in React is set to undergo significant changes. The new root API, which includes ReactDOM.createRoot and root.render, provides more control over when and how components are rendered. This marks a new era in React's evolution, one that promises to bring even better performance and flexibility to React developers.
Despite these changes, the legacy of ReactDOM.render will continue to be felt. Its principles and patterns have shaped the way we think about rendering in React, and its influence will continue to be seen in the new APIs and features that the React team introduces. As React continues to evolve, it's exciting to think about what the future holds for rendering in React.
Tired of manually designing screens, coding on weekends, and technical debt? Let DhiWise handle it for you!
You can build an e-commerce store, healthcare app, portfolio, blogging website, social media or admin panel right away. Use our library of 40+ pre-built free templates to create your first application using DhiWise.