MiPiBoy Logo
Back to all articles
DocumentsReact

React Basic Ruls documents

Morteza Aghaei React Basic Ruls documents.

React Basic Ruls documents

اصول اولیه React - توضیح ساده و کاربردی

۳. Props و State

Props (ویژگی‌ها)

// پدر → فرزند
<Child name="علی" age={20} />

// فرزند
function Child(props) {
  return <p>نام: {props.name}, سن: {props.age}</p>;
}
  • یک‌طرفه (Parent → Child)
  • تغییرناپذیر (Immutable)
  • مثل پارامتر تابع

State (حالت)

function Counter() {
  const [count, setCount] = useState(0);
  
  return (
    <div>
      <p>شمارش: {count}</p>
      <button onClick={() => setCount(count + 1)}>
        افزایش
      </button>
    </div>
  );
}
  • داخلی کامپوننت
  • تغییرپذیر با setState
  • با تغییر state، کامپوننت دوباره رندر می‌شود

۴. Virtual DOM و Reconciliation

مثل نقشه‌ی یک شهر:

DOM واقعیVirtual DOM
ساختمان‌های فیزیکینقشه‌ی شهر
تغییر سخت و کندتغییر سریع روی کاغذ
مستقیماً با کاربر تعاملفقط نقشه‌ی راهنما

فرآیند کار:

  1. تغییر state
  2. ساخت Virtual DOM جدید
  3. مقایسه با نسخه قبلی (Diffing)
  4. فقط تغییرات لازم به DOM واقعی اعمال می‌شود
// قبل
<div>
  <p>آیتم ۱</p>
  <p>آیتم ۲</p>
</div>

// بعد (فقط آیتم ۳ اضافه شد)
<div>
  <p>آیتم ۱</p>
  <p>آیتم ۲</p>
  <p>آیتم ۳</p> {/* فقط این به DOM واقعی اضافه می‌شود */}
</div>

۵. Conditional Rendering

چند روش برای شرطی کردن نمایش:

// ۱. با if ساده
function Greeting({ isLoggedIn }) {
  if (isLoggedIn) {
    return <h1>خوش آمدید!</h1>;
  }
  return <h1>لطفا وارد شوید.</h1>;
}

// ۲. با عملگر ternary
function Message({ hasError }) {
  return (
    <div>
      {hasError ? (
        <p className="error">خطا!</p>
      ) : (
        <p className="success">موفق!</p>
      )}
    </div>
  );
}

// ۳. با عملگر &&
function Notification({ messages }) {
  return (
    <div>
      {messages.length > 0 && (
        <p>شما {messages.length} پیام جدید دارید</p>
      )}
    </div>
  );
}

۶. Lists و Keys

نمایش لیست‌ها:

function ShoppingList() {
  const items = ['شیر', 'نان', 'تخم مرغ'];
  
  return (
    <ul>
      {items.map((item, index) => (
        <li key={index}>{item}</li>
      ))}
    </ul>
  );
}

چرا Key مهم است؟

// ❌ بدون key - React نمی‌تواند تغییرات را تشخیص دهد
items.map(item => <li>{item}</li>)

// ✅ با key - React می‌داند هر آیتم چیست
items.map((item, index) => <li key={index}>{item}</li>)
// یا بهتر:
items.map(item => <li key={item.id}>{item.name}</li>)

قوانین Key:

  1. یکتا در بین siblings
  2. ثابت (نه random، نه index*)
  3. بهتر است از ID داده استفاده شود

۷. Event Handling

تفاوت با HTML معمولی:

HTML معمولیReact
onclick="handle()"onClick={handle}
return false برای جلوگیریe.preventDefault()
Event در global scopeEvent در component scope

مثال‌ها:

function Button() {
  // ۱. تعریف تابع
  function handleClick() {
    console.log('کلیک شد!');
  }
  
  // ۲. با arrow function
  const handleMouseEnter = () => {
    console.log('ماوس وارد شد');
  };
  
  return (
    <button 
      onClick={handleClick}
      onMouseEnter={handleMouseEnter}
      onDoubleClick={() => console.log('دابل کلیک!')}
    >
      کلیک کن
    </button>
  );
}

ارسال پارامتر به Event Handler:

function ItemList() {
  const items = ['آیتم ۱', 'آیتم ۲', 'آیتم ۳'];
  
  const handleDelete = (itemName) => {
    console.log(`حذف ${itemName}`);
  };
  
  return (
    <ul>
      {items.map(item => (
        <li key={item}>
          {item}
          <button onClick={() => handleDelete(item)}>
            حذف
          </button>
        </li>
      ))}
    </ul>
  );
}

Event Object:

function Form() {
  const handleSubmit = (e) => {
    e.preventDefault(); // جلوگیری از refresh صفحه
    console.log('فرم ارسال شد');
  };
  
  const handleChange = (e) => {
    console.log('مقدار جدید:', e.target.value);
  };
  
  return (
    <form onSubmit={handleSubmit}>
      <input 
        type="text" 
        onChange={handleChange}
      />
      <button type="submit">ارسال</button>
    </form>
  );
}

جمع‌بندی سریع:

مفهومکاربردمثال
کامپوننتبلوک‌های سازنده UIfunction Button() { ... }
JSXHTML در JavaScript<h1>سلام {name}</h1>
Propsداده از والد به فرزند<Child name="علی" />
Stateداده داخلی کامپوننتconst [count, setCount] = ...
Virtual DOMبهینه‌سازی رندرReact خودش مدیریت می‌کند
Conditionalنمایش شرطی{isLogged && <Menu />}
Listsنمایش آرایه‌ها{items.map(item => ...)}
Eventsمدیریت رویدادهاonClick={handleClick}
MiPiBoy Blog