تفاوت Class Component و Functional Component در React.js چیست ؟
کسی میدونه تفاوت Functional Component و Class Component در react.Js دقیقا چی هست؟ لطفا اگر ممکنه با مثال توضیح بدید
پاسخ هوش مصنوعی
در React.js، دو نوع اصلی کامپوننت وجود دارد: Class Component و Functional Component. در زیر به تفاوت های اصلی آنها و مثال هایی برای هر یک می پردازیم.
1. Class Component:
کامپوننت های کلاس به وسیلهٔ کلاس ها تعریف می شوند و از React.Component
وراثت می برند. این نوع کامپوننت ها معمولاً برای مدیریت حالت (state) و چرخه حیات (lifecycle) کامپوننت ها استفاده می شوند.
import React, { Component } from 'react';
class MyClassComponent extends Component {
constructor(props) {
super(props);
this.state = { count: 0 };
}
increment = () => {
this.setState({ count: this.state.count + 1 });
};
render() {
return (
Count: {this.state.count}
);
}
}
2. Functional Component:
کامپوننت های تابعی به وسیلهٔ توابع جاوااسکریپت تعریف می شوند و معمولاً برای کامپوننت هایی ساده که نیاز به حالت یا چرخه حیات خاصی ندارند، استفاده می شوند. اما با معرفی "Hooks"، این نوع کامپوننت ها نیز می توانند حالت و دیگر قابلیت ها را مدیریت کنند.
import React, { useState } from 'react';
const MyFunctionalComponent = () => {
const [count, setCount] = useState(0);
const increment = () => {
setCount(count + 1);
};
return (
Count: {count}
);
};
تفاوت های کلیدی:
- نحوه تعریف: کامپوننت کلاس با کلاس و کامپوننت تابعی با تابع تعریف می شود.
- مدیریت حالت: کامپوننت های کلاس با
this.state
وthis.setState
مدیریت حالت می کنند، در حالی که کامپوننت های تابعی می توانند ازuseState
برای مدیریت حالت استفاده کنند. - چرخه حیات: کامپوننت های کلاس دارای متدهای چرخه حیات هستند، در حالی که کامپوننت های تابعی می توانند از Hook هایی مثل
useEffect
برای مدیریت چرخه حیات استفاده کنند.
به طور کلی، اگر شما نیاز به استفاده از ویژگی های پیچیده تری مانند چرخه حیات و مدیریت حالت دارید، می توانید از کامپوننت های کلاس استفاده کنید. اما اگر کامپوننت شما ساده است و می خواهید کد تمیزتر و کوتاه تری داشته باشید، کامپوننت های تابعی پیشنهاد می شوند.
شما ابتدا فایل package.json رو داخل پروژه React.js خودتون باز کنید و به ورژن react خودتون نگاه کنید.
"dependencies": {
"react": "^16.11.0",
"react-dom": "^16.11.0",
"react-scripts": "3.2.0"
},
در کدهای بالا ورژن react.js من 16.11.0 هست. اگر نسخه ری اکت شما از 16.8.0 کمتر باشه کلا از functional component ها نمیتونین استفاده کنید چون از نسخه 16.8.0 به بعد این قابلیت اضافه شده.
نکته بعدی در مورد تفاوت این 2 این هست که Class components در واقع کلاس های ES6 هستند و Functional Components توابع هستند.
Functional Component ها جدیدتر هستند و در نسخه های جدید به ری اکت اضافه شدن. در ادامه 2 مثال از Class component ها و functional component ها میزنم و توضیحاتی رو خدمتتون ارایه میدم :
class App extends Component{
render(){
return(
<div className="App">
<h1>Hello World</h1>
</div>
)
}
}
در قطعه کد بالا یک Class Component رو مثال زدیم. حالا کافیه این قطعه کد رو کپی کنید و در bable compiler پیست کنید تا تبدیل بشه به کدهای قابل فهم برای مرورگر. مشاهده می کنید که حجم بسیار زیادی از کد تولید میشه. برای این کار روی این لینک کلیک کنید و بعد کدها رو کپی کنید.
و اما ما میتونیم دقیقا همین قطعه کد رو با Functional Component ها بنویسیم
function App() {
return (
<div className="App">
<div>
<h1>Hello World !!!</h1>
</div>
</div>
);
دستور بالا functional Component هست. این دستورات بسیار ساده تر و قابل فهم تر هستن. و اگر همین دستورات رو توی کامپایلر bable کپی و پیست کنید مشاهده می کنید که حجم کد تولید شده برای قابل فهم شدن برای مرورگر بسیار کم هست.
مزایای functional component ها نسبت به class component
- تولید کدهای بسیار کمتر در functional component
- کدهای بسیار ساده تر و قابل فهم تر
- و اینکه functional component ها reusable تر هستند
- آموزش استفاده از پلاگین گردونه شانس در Asp.net core به همراه سورس
- نمایش متن به صورت فرمت شده در CkEditor
- آموزش استفاده از SignalR در Asp.net Core با مثال عملی
- ادغام چند گزارش استیمول سافت بصورت پی دی اف در یک فایل
- نحوه تغییر استایل کامپوننت select2 چگونه است ؟
- چگونه امنیت پروژه را در Asp.net Core افزایش دهیم ؟
- ارسال پارامتر در دستور window.open جی کویری
- ارسال پارامتر از طریق جاوااسکریپت با کلیک روی تگ a
- خطای 500 زمان اجرا شدن پروژه روی هاست
- کویری نویسی در استیمول سافت جهت فیلتر اطلاعات
- انتخاب فریم ورک بهتر بین Angular، Vue و react js
- حذف فایلها و دستورات Css و JavaScript اضافی
- ایجاد سایت چند صفحه ای با react js
- جمع کردن (Collapse) منوی جانبی موقع لود فرم در پنل AdminLte
- دلیل خطای Identifier 'X' has already been declared در جی کویری چیست ؟
- جدا کردن سه رقم سه رقم اعداد در input با جاوااسکریپت
- محدود کردن تایپ عدد یا حروف با جاوا اسکریپت
- مقایسه بین فریم ورک های Angular و React.js و Vue js
- پیش نیازهای یادگیری React.Js چیست ؟
- نمایش پیغام گرافیکی با جی کویری