---
id: docs-component-lifecycle
title: Component Lifecycle
description: What happens when I render a React component?
layout: docs
prev: component-data.html
next: event-handling.html
---

## Mounting

[We have previously seen](component-basics.html) how to render components into
existing DOM elements on the page:

```javascript
React.renderComponent(<div>Hello, world!</div>, document.body);
```

In this one simple line, we have accomplished the following:

 - A `<div>` (defined by `React.DOM.div`) component is instantiated.
 - The component is **mounted** into `document.body`.

**Mounting** is the process of initializing a React component by creating its
DOM nodes and inserting them into a supplied container node.

At this point, the entire page consists of a single `<div>` with "Hello,
world!".

## Updating

Let's add a second call to `React.renderComponent()` after three
seconds:

```javascript{2-4}
React.renderComponent(<div>Hello, world!</div>, document.body);
setTimeout(function() {
  React.renderComponent(<div>Goodbye, world.</div>, document.body);
}, 3000);
```

The second call to `React.renderComponent()` will trigger the following:

 - The `<div>` component will check the new props to see if anything changed.
 - The set of changes are used to **update** the DOM node as necessary.

**Updating** is the process of mutating the rendered DOM nodes and occurs
whenever either props or state has changed. This ensures that the rendered DOM
is consistent with the data.

## Unmounting

Let's add one final call to `React.renderComponent()` after another three
seconds:

```javascript{5-7}
React.renderComponent(<div>Hello, world!</div>, document.body);
setTimeout(function() {
  React.renderComponent(<div>Goodbye, world.</div>, document.body);
}, 3000);
setTimeout(function() {
  React.renderComponent(<img src="/images/fin.png" />, document.body);
}, 6000);
```

The third call to `React.renderComponent()` will trigger the following:

 - An `<img>` (defined by `React.DOM.img`) component is instantiated.
 - React will compare the `<div>` component with the `<img>` component.
 - Since the component class is different, the `<div>` component will be
   **unmounted**.
 - The `<img>` component will then be mounted into `document.body`.

**Unmounting** is the process of releasing resources that have been allocated by
a component. This allows user interfaces built with React to live long without
memory leaks.

Components can also be unmounted using
`React.unmountAndReleaseReactRootNode()`:

```javascript
React.unmountAndReleaseReactRootNode(document.body);
```

This will unmount any components mounted immediately within `document.body`.
