This relates to stateful DOM components (form elements) and the React docs explain the difference:

  • A Controlled Component is one that takes its current value through props and notifies changes through callbacks like onChange. A parent component "controls" it by handling the callback and managing its own state and passing the new values as props to the controlled component. You could also call this a "dumb component".
  • A Uncontrolled Component is one that stores its own state internally, and you query the DOM using a ref to find its current value when you need it. This is a bit more like traditional HTML.

Most native React form components support both controlled and uncontrolled usage:

// Controlled:
<input type="text" value={value} onChange={handleChange} />

// Uncontrolled:
<input type="text" defaultValue="foo" ref={inputRef} />
// Use `inputRef.current.value` to read the current value of <input>

In most (or all) cases you should use controlled components.

Answer from Aaron Beall on Stack Overflow
🌐
GeeksforGeeks
geeksforgeeks.org › reactjs › controlled-vs-uncontrolled-components-in-reactjs
Controlled vs Uncontrolled Components in ReactJS - GeeksforGeeks
Controlled components in React are the components whose state and behaviors are managed by React components using states while the uncontrolled components manage their own state and control their behaviors with the help of DOM.
Published   September 9, 2025
🌐
React
react.dev › learn › sharing-state-between-components
Sharing State Between Components – React
Finally, pass the event handlers down so that the children can change the parent’s state. It’s useful to consider components as “controlled” (driven by props) or “uncontrolled” (driven by state).
🌐
React
legacy.reactjs.org › docs › forms.html
Forms – React
If you want this behavior in React, it just works. But in most cases, it’s convenient to have a JavaScript function that handles the submission of the form and has access to the data that the user entered into the form. The standard way to achieve this is with a technique called “controlled components”.
🌐
freeCodeCamp
freecodecamp.org › news › what-are-controlled-and-uncontrolled-components-in-react
What are Controlled and Uncontrolled Components in React.js?
June 21, 2024 - These concepts define how form data is handled within a React component. Controlled components rely on React state to manage the form data, while uncontrolled components use the DOM itself to handle form data.
🌐
LogRocket
blog.logrocket.com › home › controlled vs. uncontrolled components in react
Controlled vs. uncontrolled components in React - LogRocket Blog
June 4, 2024 - In React, there are two ways to handle form data in our components. The first way is by using the state within the component to handle the form data. This is called a controlled component.
🌐
React
legacy.reactjs.org › docs › uncontrolled-components.html
Uncontrolled Components – React
These new documentation pages teach modern React and include live examples: ... In most cases, we recommend using controlled components to implement forms. In a controlled component, form data is handled by a React component.
🌐
GeeksforGeeks
geeksforgeeks.org › reactjs › what-are-controlled-components-in-reactjs
Controlled Components in ReactJS - GeeksforGeeks
August 12, 2025 - Controlled components are form elements managed by React state, allowing React to control and update their values for better input handling and validation.
Find elsewhere
🌐
Medium
medium.com › @agamkakkar › controlled-v-s-uncontrolled-component-in-react-2db23c6dc32e
Controlled v/s Uncontrolled Component in React | by Agam Kakkar | Medium
April 29, 2024 - In React, a component is called “controlled” when we allow React to take control of it. This means the component manages the input form, and any changes to it are handled entirely by React using event handlers like setState().
🌐
Robin Wieruch
robinwieruch.de › react-controlled-components
What are Controlled Components in React
Now the initial state should be seen for the input field and for the output paragraph once you start the application. Also when you type something in the input field, both input field and output paragraph are synchronized by React's state. The input field has become a controlled element and the App component a controlled component.
Top answer
1 of 9
379

This relates to stateful DOM components (form elements) and the React docs explain the difference:

  • A Controlled Component is one that takes its current value through props and notifies changes through callbacks like onChange. A parent component "controls" it by handling the callback and managing its own state and passing the new values as props to the controlled component. You could also call this a "dumb component".
  • A Uncontrolled Component is one that stores its own state internally, and you query the DOM using a ref to find its current value when you need it. This is a bit more like traditional HTML.

Most native React form components support both controlled and uncontrolled usage:

// Controlled:
<input type="text" value={value} onChange={handleChange} />

// Uncontrolled:
<input type="text" defaultValue="foo" ref={inputRef} />
// Use `inputRef.current.value` to read the current value of <input>

In most (or all) cases you should use controlled components.

2 of 9
99

They both render form elements

Uncontrolled component and Controlled component are terms used to describe React components that render HTML form elements. Every time you create a React component that renders an HTML form element, you are creating one of those two.

Uncontrolled components and Controlled components differ in the way they access the data from the form elements (<input>, <textarea>, <select>).

Uncontrolled Components

An uncontrolled component is a component that renders form elements, where the form element's data is handled by the DOM (default DOM behavior). To access the input's DOM node and extract its value you can use a ref.

Example - Uncontrolled component:
const { useRef } from 'react';

function Example () {
  const inputRef = useRef(null);
  return <input type="text" defaultValue="bar" ref={inputRef} />
}

Controlled Components

A controlled component is a component that renders form elements and controls them by keeping the form data in the component's state.

In a controlled component, the form element's data is handled by the React component (not DOM) and kept in the component's state. A controlled component basically overrides the default behavior of the HTML form elements.

We create a controlled component by connecting the form element (<input>, <textarea> or <select>) to the state by setting its attribute value and the event onChange.

Example - Controlled Component:
const { useState } from 'react';

function Controlled () {
  const [email, setEmail] = useState("");

  const handleInput = (e) => setEmail(e.target.value);


  return <input type="text" value={email} onChange={handleInput} />;
}
🌐
Pieces
pieces.app › home
React: Controlled vs Uncontrolled Components
Pieces for Developers – Long-Term Memory Agent
Let's talk about controlled vs uncontrolled React components, with some examples. We’ll discuss their advantages and disadvantages, and finally, we’ll look at the Formik library. Pieces is your AI long-term memory agent that captures live context from browsers to IDEs and tools, manages snippets, and supports multiple LLMs. This app has dramatically improved my workflow!
Rating: 5 ​
🌐
Saeloun Blog
blog.saeloun.com › 2024 › 07 › 19 › react-controlled-uncontrolled-components
Understanding Controlled And Uncontrolled Components In React | Saeloun Blog
July 19, 2024 - Understanding the differences between these two approaches is crucial for building effective and maintainable React applications. Controlled components are those where React handles the form data through its state.
🌐
Codedamn
codedamn.com › news › react js
What are controlled and uncontrolled components in React?
October 9, 2023 - With controlled components, data flow is consistent and reliable. Since React maintains control over form values and their updates, there’s minimal chance for unexpected behaviors or discrepancies in data representation.
🌐
DEV Community
dev.to › vishnusatheesh › controlled-and-uncontrolled-components-in-react-1me4
Controlled and Uncontrolled components in react - DEV Community
April 10, 2024 - In react, there are two main approaches to handling form inputs: ... Controlled components are form inputs whose values are controlled by React state. The state variables are updated whenever the value of the input changes, and the value of ...
🌐
DEV Community
dev.to › fazal_mansuri_ › controlled-vs-uncontrolled-components-in-react-a-deep-dive-1hhb
⚛️ Controlled vs Uncontrolled Components in React – A Deep Dive - DEV Community
November 16, 2025 - When building forms in React, you’ll inevitably come across controlled and uncontrolled components. At first glance, they look similar — both accept user input and manage form data.
🌐
DEV Community
dev.to › ale3oula › navigating-reacts-controlled-vs-uncontrolled-components-48kb
Navigating React's Controlled vs. Uncontrolled Components - DEV Community
April 14, 2024 - Let's start with controlled components. In React, a controlled component is one where React controls the state of the component. This means that the component's state is managed by React itself, typically through props.
🌐
Certificates
certificates.dev › blog › controlled-vs-uncontrolled-components-in-react
Controlled vs Uncontrolled Components in React - Certificates.dev
December 8, 2025 - Both uses of "controlled" and "uncontrolled" share the same underlying concept: Controlled: State is owned externally and passed in via props · Uncontrolled: State is owned internally by the component itself
🌐
Scaler
scaler.com › home › topics › react › controlled v/s uncontrolled component in react
Controlled v/s Uncontrolled Component in React - Scaler Topics
January 12, 2024 - A component in react is referred to as controlled when we let react control the component for us. It means that the component controls the input form, and all of its changes are completely driven by event handlers like setState().
🌐
Reddit
reddit.com › r/reactjs › controlled vs uncontrolled component
r/reactjs on Reddit: Controlled vs Uncontrolled component
June 17, 2023 -

This post was orignally posted in r/react but then I realized this sub is the main one:

I am learning about controlled vs uncontrolled component now. Based on React's old documentation on Controlled Component : A react component that renders a form also controls what happened in the form is "Controlled Component". Essentailly ,if a component manages its own states are controlled component.

For uncontrolled Component, the value is not saved by React, instead it is saved by the DOM. So we used ref to get the value (like document.queryselect).

Everything makes sense for me until I saw this stack post, the top accepted answer says that a component is controlled if there is a parent component that passing value to it and notifies changes on callback. While a uncontrolled component stores its own state.

This contradicts of what the React old doc said: if a component controlled its own state, then it should be controlled component, but the stack post says otherwise.

Can anyone clarify these questions:

1: If I have a component with a input field with onChange to save the value in its state(there is no parent involved, it is a independent component), is this component controlled or uncontrolled?

2: If I have a component with a input field with onChange callback to its parent and the parent will manage the form input instead, is this controlled still?

3: If a component doesn't store value in React, but instead using the traditional DOM element's value, then it is uncontrolled component, right?

PS: modified to add missing links.