In React, component names must start with an uppercase letter due to how JSX differentiates between HTML elements and custom components.
Reasons for Capitalizing React Component Names
JSX Differentiation
- JSX treats lowercase names (
<div>
,<span>
, etc.) as native HTML elements. - JSX treats uppercase names (
<MyComponent>
) as custom React components.
function myComponent() { return <h1>Hello</h1>; } export default myComponent; // This will throw an error because 'myComponent' is treated as an HTML tag <myComponent />
JSX Compiles to React.createElement()
- When JSX is transpiled, React uses
React.createElement()
. - If a component starts with lowercase, React assumes it’s an HTML tag instead of a component.
Example of JSX compilation:
<MyComponent />
Compiles to:
React.createElement(MyComponent);
But if it were <myComponent />
, React would assume it’s an HTML tag, which doesn’t exist.
Code Readability and Best Practices
- Uppercase naming clearly differentiates React components from normal HTML elements.
- It aligns with JavaScript’s convention where class names start with uppercase (PascalCase).