Uncontrolled components are input elements that manage their own state internally, while controlled components are input elements that are fully controlled by the web application. The choice between using uncontrolled or controlled components depends on the specific needs of the web application and the functionality of the input element in question.
Custom hooks in react are like reusable functions. Custom hooks can be used to handle common concerns like fetching data, managing state, and interacting with APIs. By using custom hooks,we can reduce code duplication and improve the overall organization and maintainability of our code.