Современный стандарт (рекомендуемый подход с React 16.8+)
// Простейший функциональный компонент
function Greeting(props) {
return <h1>Hello, {props.name}!</h1>;
}
// С использованием стрелочной функции
const Greeting = (props) => {
return <h1>Hello, {props.name}!</h1>;
};
// С деструктуризацией props
const Greeting = ({ name }) => {
return <h1>Hello, {name}!</h1>;
};
Особенности:
this
Устаревший, но поддерживаемый подход (используется в legacy-коде)
class Greeting extends React.Component {
render() {
return <h1>Hello, {this.props.name}!</h1>;
}
}
Особенности:
this.state
и this.setState()
import { useState } from 'react';
function Counter() {
const [count, setCount] = useState(0);
return (
<div>
<p>Count: {count}</p>
<button onClick={() => setCount(count + 1)}>
Increment
</button>
</div>
);
}
class Counter extends React.Component {
constructor(props) {
super(props);
this.state = { count: 0 };
}
render() {
return (
<div>
<p>Count: {this.state.count}</p>
<button onClick={() => this.setState({ count: this.state.count + 1 })}>
Increment
</button>
</div>
);
}
}
function ButtonWithAlert() {
const handleClick = () => {
alert('Button clicked!');
};
return (
<button onClick={handleClick}>
Click me
</button>
);
}
function Card({ children }) {
return (
<div className="card">
{children}
</div>
);
}
function App() {
return (
<Card>
<h2>Card Title</h2>
<p>Card content goes here</p>
</Card>
);
}
Именование:
MyComponent
, а не myComponent
)MyComponent.jsx
)Один компонент — один файл (кроме небольших вспомогательных компонентов)
Props:
Ключи (keys):
{items.map(item => (
<ListItem key={item.id} item={item} />
))}
Функциональные компоненты — современный стандарт:
Классовые компоненты — устаревший подход:
Общие правила:
Совет: Для новых проектов всегда используйте функциональные компоненты с хуками — это современный, более простой и производительный подход.