Error: A component is changing an uncontrolled input of type ... to be controlled. - 10 Causes and Fixes

React just logged Error: A component is changing an uncontrolled input of type ... to be controlled. in your console, and the input you were typing into probably still works - which is why this one is easy to ignore for weeks. It is not a crash; it is React telling you that a single <input> was mounted without a value prop (or with value={undefined}) and then re-rendered with one.

That switch matters because React manages the two kinds of inputs differently. An uncontrolled input keeps its text in the DOM node. A controlled input keeps it in your state and forces the DOM to match. Flipping between the two mid-life means React has to decide whose copy of the text wins, and the answer is not always the one you wanted - cursor jumps, wiped characters, and "my form resets when data loads" bugs all trace back here.

This page covers the ten concrete ways a value prop goes from undefined to a string, each with a reproduction you can paste into a component, the lines that fix it, and a way to verify. If none of them match your case, the diagnostic checklist narrows it down in five steps. Close-up of hands coding on a laptop, focusing on programming productivity.

ErrorWarning: A component is changing an uncontrolled input of type text to be controlled. Input elements should not switch from uncontrolled to controlled (or vice versa). Decide between using a controlled or uncontrolled input element for the lifetime of the component.
Where it happensReact (react-dom and react-native), development builds only - any framework on top of React: Next.js, Vite, Create React App, Remix. Fires from the form layer, usually on the render after an async fetch or a state reset.
What it meansOne ,