
प्रतिक्रिया 19, 2024 के अंत में रिलीज़ हुआ और 2025-2026 तक व्यापक रूप से अपनाया गया, हुक के बाद से सबसे महत्वपूर्ण बदलाव लाता है। नया कंपाइलर, सर्वर कंपोनेंट्स, एक्शन और सरलीकृत कॉन्टेक्स्ट रिएक्ट ऐप्स के निर्माण के तरीके को नया आकार दे रहे हैं।
📋 Table of Contents
रिएक्ट कंपाइलर – अब और उपयोग नहीं मेमो/यूजकॉलबैक
रिएक्ट कंपाइलर स्वचालित रूप से घटकों और मूल्यों को याद रखता है। अधिकांश को हटा देंuseMemo,useCallback, औरmemo()कॉल.
// React 18: Manual memoization
const ExpensiveComponent = memo(({ data }) => {
const processed = useMemo(() => processData(data), [data]);
const handleClick = useCallback(() => onClick(data), [data, onClick]);
return <div onClick={handleClick}>{processed}</div>;
});
// React 19: Compiler handles it automatically
function ExpensiveComponent({ data }) {
const processed = processData(data);
return <div onClick={() => onClick(data)}>{processed}</div>;
}
सर्वर घटक
सर्वर घटक सर्वर पर चलते हैं, सीधे डेटाबेस तक पहुँचते हैं, और क्लाइंट को शून्य जावास्क्रिप्ट भेजते हैं। Next.js 14+ में डिफ़ॉल्ट।
// app/users/page.tsx — runs on server, no JS sent to client
import { db } from '@/lib/db';
export default async function UsersPage() {
const users = await db.query('SELECT * FROM users LIMIT 10');
return (
<ul>
{users.map(u => <li key={u.id}>{u.name}</li>)}
</ul>
);
}
क्रियाएँ – सर्वर और क्लाइंट
क्रियाएँ पुराने ईवेंट हैंडलर + फ़ेच पैटर्न को प्रतिस्थापित करती हैं। लंबित स्थितियों, त्रुटियों और आशावादी अपडेट को स्वचालित रूप से संभालें।
async function createUser(formData: FormData) {
'use server';
const name = formData.get('name') as string;
await db.insert('users', { name });
revalidatePath('/users');
}
export default function CreateUserForm() {
return (
<form action={createUser}>
<input name="name" placeholder="Name" />
<button type="submit">Create</button>
</form>
);
}
यूज़एक्शनस्टेट हुक
ट्रैक लंबित, त्रुटि और सफलता स्थिति स्वचालित रूप से। वर्बोज़ यूज़स्टेट + मैन्युअल फॉर्म हैंडलिंग को प्रतिस्थापित करता है।
import { useActionState } from 'react';
async function signUp(prevState, formData) {
const email = formData.get('email');
try {
await createAccount(email);
return { success: true };
} catch (e) {
return { error: e.message };
}
}
function SignUpForm() {
const [state, action, isPending] = useActionState(signUp, null);
return (
<form action={action}>
<input name="email" type="email" />
{state?.error && <p className="error">{state.error}</p>}
{state?.success && <p>Account created!</p>}
<button disabled={isPending}>
{isPending ? 'Creating...' : 'Sign Up'}
</button>
</form>
);
}
उपयोग() हुक – घटकों में एसिंक
वादे और संदर्भ इनलाइन पढ़ें। अब और नहींuseEffectक्लाइंट घटकों में डेटा लाने के लिए।
import { use, Suspense } from 'react';
async function fetchUser(id) {
const res = await fetch(`/api/users/${id}`);
return res.json();
}
function UserCard({ userPromise }) {
const user = use(userPromise); // Suspense-aware
return <div>{user.name}</div>;
}
// In parent:
<Suspense fallback={<Skeleton />}>
<UserCard userPromise={fetchUser(userId)} />
</Suspense>
सरलीकृत संदर्भ
संदर्भ प्रदाता अब<Context>का उपयोग करते हैं सीधे – अब और नहीं.Provider.
const ThemeContext = createContext('light');
// React 19: Direct
function App() {
return (
<ThemeContext value="dark">
<Page />
</ThemeContext>
);
}
// React 18: Required .Provider
function App() {
return (
<ThemeContext.Provider value="dark">
<Page />
</ThemeContext.Provider>
);
}
निष्कर्ष
रिएक्ट 19 अब तक का सबसे डेवलपर-अनुकूल संस्करण है। कंपाइलर प्रदर्शन बॉयलरप्लेट को समाप्त कर देता है, सर्वर घटक बंडल आकार को कम कर देते हैं, और क्रियाएँ फॉर्म हैंडलिंग को सरल बना देती हैं। यदि आप अभी भी रिएक्ट 17 या 18 पर हैं, तो अभी अपग्रेड करें।
🔗 Share this article
✍️ Leave a Comment