برنامه نویسی

React Mastery: درک `onChange = {HandleChange}` vs `onchange = {(e) => handlechange (e)}`

https%3A%2F%2Fdev to uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1fqanjs29htbwczwmljm handlechange (e)}` endraw
” loading=”lazy” width=”800″ height=”1200″/>

تسلط واکنش: درک onChange={handleChange} در مقابل onChange={(e) => handleChange(e)}

در توسعه React مدرن ، رسیدگی به رویدادها یک مهارت اساسی برای ایجاد رابط های پاسخگو و داده محور است. این که آیا شما در حال ساخت یک فرم پویا هستید یا مؤلفه های قابل استفاده مجدد را ساختید ، دانستن نحوه مدیریت کارآمد رویدادها می تواند کد شما را ساده تر ، خواندنی تر و اجرا کننده تر کند.

امروز ، ما یک تفاوت فریبنده ساده را تجزیه خواهیم کرد که بسیاری از آنها واکنش نشان می دهند:

onChange={handleChange}
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

در مقابل

onChange={(e) => handleChange(e)}
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

در نگاه اول ، به نظر می رسد هر دو کار یکسان را انجام می دهند – این رویداد را به یک کنترل کننده منتقل کنید. اما وجود دارد تفاوت های ظریف این موضوع در برنامه های دنیای واقعی است. بیایید آنها را با هم کاوش کنیم.


راه اندازی

یک فرم ورودی React معمولی را با استفاده از TypeScript تصور کنید:

import React, { useState } from 'react';

export const EmailInput = () => {
  const [email, setEmail] = useState('');

  const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {
    console.log(e);
    setEmail(e.target.value);
  };

  return (
    <input
      type="email"
      name="email"
      className="form-control"
      onChange={handleChange}
    />
  );
};
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

این تنظیم کاملاً کار می کند – و شما همچنین می توانید بنویسید:

onChange={(e) => handleChange(e)}
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

بنابراین ، تفاوت چیست؟


گزینه 1: onChange={handleChange}

این کارآمدترین و مستقیم ترین روش برای اتصال یک کنترل کننده رویداد است.

چگونه کار می کند:

  • شما هستید عبور مستقیم مرجع عملکردبشر
  • واکنش پاسخ می دهد handleChange(e) برای شما و تزریق رویداد به عنوان اولین پارامتر.
  • هیچ عملکرد جدیدی ایجاد نشده است در حین ارائه

✅ مزایا:

  • نحو پاک کننده.
  • عملکرد بهتر (عملکرد جدیدی در هر رندر وجود ندارد).
  • برای بهینه سازی واکنش آسانتر است.

⚠ احتیاط:

  • شما نمی توانید استدلال های اضافی را مستقیماً اضافه کنید.
  • شما باید اطمینان حاصل کنید handleChange نوع رویداد صحیح را می پذیرد.

گزینه 2: onChange={(e) => handleChange(e)}

این یک فرم انعطاف پذیر تر با استفاده از یک عملکرد Arrow Inline است.

چگونه کار می کند:

  • یک تابع جدید ایجاد می شود هر بار که مؤلفه دوباره رد می شودبشر
  • آن عملکرد جدید شما را صدا می کند handleChange(e)بشر

✅ مزایا:

  • می توانید سفارشی یا دگرگون کنید e قبل از عبور از آن.
  • می توانید پارامترهای اضافی را به هم متصل کنید.
onChange={(e) => handleChange(e, 'customArgument')}
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

اشکالاتی:

  • عملکرد جدیدی را در هر رندر → هزینه عملکرد جزئی ایجاد می کند.
  • بهینه سازی با React.memo، از آنجا که غرفه ها/توابع پایدار نیستند.

مثال واقعی با اشکال زدایی

const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {
  console.log('Event:', e);
};
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

فرم مستقیم:

<input onChange={handleChange} />
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

فرم درون خطی:

<input onChange={(e) => handleChange(e)} />
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

✅ هر دو هستند از نظر عملکردی در این مورد استفاده ساده

اما تصور کنید اگر منطق سفارشی را در عملکرد فلش اضافه کردید:

<input onChange={(e) => {
  console.log('Before handling');
  handleChange(e);
}} />
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

اکنون استفاده از عملکرد درون خطی ضروری است.


چه موقع استفاده از کدام؟

مورد استفاده نحو ترجیحی
ارسال رویداد ساده onChange={handleChange}
قبل از فراخوانی به منطق اضافی احتیاج دارید onChange={(e) => handleChange(e)}
باید استدلال های اضافی را تصویب کنید onChange={(e) => customFn(e, x)}
بهینه سازی عملکرد (مجدداً مکرر) onChange={handleChange}

پایان

هر دو روش معتبر و معمولاً در React استفاده می شوند. نکته اصلی درک قصد و تجارت:

  • برای کد تمیز و کارآمد: استفاده کنید onChange={handleChange}بشر
  • برای منطق سفارشی یا پارامتر سازی: استفاده کنید onChange={(e) => ...}بشر

با تسلط بر این تمایزها ، کد پاک کننده ، سریعتر و قابل حفظ تر می نویسید. و این همان چیزی است که تسلط React همه چیز در مورد آن است. 💪


امتیاز

اگر استفاده می کنید React.memo، از عملکرد فلش در onChangeبا onClick، و غیره ، مگر اینکه در آن پیچیده شود useCallback-بنابراین این واکنش می تواند برابری پروپ را به درستی تشخیص دهد و از بازپرداخت های غیر ضروری جلوگیری کند.


#REACT #typescript #frontend #hooks #eventhandling #reactjs

نوشته های مشابه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دکمه بازگشت به بالا