React 作为现代前端开发的核心框架,掌握其最佳实践对于构建高质量应用至关重要。
每个组件应该只负责一个功能,这样可以提高代码的可维护性和可测试性。
```jsx
// ❌ 不好的做法
function UserProfile({ user }) {
return (
{user.email}
{post.content}
// ✅ 好的做法
function UserProfile({ user }) {
return (
使用 TypeScript 定义清晰的 Props 接口,提高代码的可读性和类型安全。
```typescript
interface ButtonProps {
variant: 'primary' | 'secondary' | 'danger'
size: 'small' | 'medium' | 'large'
disabled?: boolean
onClick: () => void
children: React.ReactNode
}
function Button({ variant, size, disabled, onClick, children }: ButtonProps) {
return (
<button
className={btn btn-${variant} btn-${size}
}
disabled={disabled}
onClick={onClick}
>
{children}
)
}
```
对于简单的本地状态,使用 useState 是最佳选择。
```jsx
function Counter() {
const [count, setCount] = useState(0)
return (
计数: {count}
当状态逻辑复杂时,useReducer 是更好的选择。
```jsx
function todoReducer(state, action) {
switch (action.type) {
case 'ADD_TODO':
return [...state, { id: Date.now(), text: action.text, completed: false }]
case 'TOGGLE_TODO':
return state.map(todo =>
todo.id === action.id ? { ...todo, completed: !todo.completed } : todo
)
default:
return state
}
}
function TodoList() {
const [todos, dispatch] = useReducer(todoReducer, [])
return (
对于纯组件,使用 React.memo 可以避免不必要的重新渲染。
```jsx
const ExpensiveComponent = React.memo(function ExpensiveComponent({ data }) {
// 复杂的计算逻辑
const processedData = useMemo(() => {
return data.map(item => ({
...item,
processed: heavyCalculation(item)
}))
}, [data])
return (
缓存昂贵的计算结果和函数引用。
```jsx
function SearchResults({ query, items }) {
const filteredItems = useMemo(() => {
return items.filter(item =>
item.name.toLowerCase().includes(query.toLowerCase())
)
}, [query, items])
const handleItemClick = useCallback((item) => {
console.log('点击了:', item.name)
}, [])
return (
遵循这些最佳实践可以帮助你构建更加健壮、可维护的 React 应用。记住,最佳实践不是一成不变的,要根据具体的项目需求和团队情况灵活应用。
继续学习和实践,你会发现更多有用的技巧和模式!
```