فرض کنید صفحهٔ ویرایش کاربر دارید و با عوض‌شدن کاربر انتخاب‌شده، فیلدهای فرم باید خالی/ریست شوند. بسیاری از ما برای این کار یک useEffect می‌نویسیم؛ اما ری‌اکت راه ساده‌تری دارد: key.

چطور کار می‌کند؟

ری‌اکت هویت کامپوننت را از روی نوع و key آن تشخیص می‌دهد. وقتی key عوض شود، نمونهٔ قبلی دور ریخته می‌شود و نمونهٔ تازه با state اولیه ساخته می‌شود.

function Page({ userId }) {
  return <EditForm key={userId} userId={userId} />;
}

function EditForm({ userId }) {
  const [name, setName] = useState("");
  // با هر userId جدید، name دوباره خالی شروع می‌شود
  return <input value={name} onChange={e => setName(e.target.value)} />;
}

کجا به کار می‌آید؟

  • فرم‌ها و ویرایشگرها هنگام عوض‌شدن رکورد.
  • چت یا کامنت که با تغییر گفت‌وگو باید خالی شود.
  • ریست کردن انیمیشن یا ویجت داخلی که state دارد.

توجه کنید که ریست‌کردن یعنی ساخت دوبارهٔ کل زیردرخت؛ برای کامپوننت‌های سنگین هزینه دارد. و هرگز از اندیس آرایه یا Math.random() به‌عنوان key در لیست‌ها استفاده نکنید.