Controlled components are those in which form data is handled by the component’s state. The component's state manages the value of the form element. Any changes to the input are handled by functions like onChange, which update the state. Uncontrolled components are those where the form data is managed by the DOM, not by the component's state. The values of the form elements are handled by the DOM itself, and to access any value that has been entered, we take the help of refs