ری اکت جی اس (ReactJS) چیست؟
ری اکت جی اس یکی از کتابخانههای محبوب و پر استفاده و رایگان و متن باز ( Open Source ) جاوا اسکریپت ( JavaScript ) برای ساخت رابط کاربری وب سایتها است. برنامههای React مقیاس پذیرتر و نگهداری از آنها راحتتر است.
این کتابخانه برای وب اپلیکیشنهای بزرگ تک صفحهای استفاده میشود که بدون نیاز تغییر صفحات، اطلاعات مورد نیاز بارگذاری میشود.
توسعهدهندگان ReactJS
ری اکت توسط جردن واک (Jordan Walke) ، یک مهندس نرمافزار در فیسبوک، ساخته شده و در سال ۲۰۱۳ به صورت رسمی اعلام شد. این کتابخانه توسط فیسبوک و اینستاگرام و گروهی از توسعهدهندگان و شرکتها ( به دلیل متن باز بودن ) توسعه و نگهداری میشوند.
شرکت های معروفی که از ReactJS استفاده کردن
روش های نصب ری اکت جی اس ( React JS )
- اضافه کردن فایل جاوا اسکریپت ری اکت
در این روش ٬ وب اپلیکیشن شما از قبل ساخته شده و فقط تصمیم به ویرایش بخشهایی از آن را دارید. این روش راحتتر است به این دلیل که با افزودن تگ اچ تی ام ال زیر به پروژه ری اکت میتوانید شروع به کدنویسی کنید.
<script data-src="https://unpkg.com/react@16/umd/react.development.js" crossorigin></script> <script src="https://unpkg.com/react-dom@16/umd/react-dom.evelopment.js" crossorigin></script>
- ایجاد پروژه جدید ری اکت
در این روش ٬ یک وب اپلیکیشن ری اکت را از پایه ایجاد و توسعه وب اپلیکیشن خود را شروع کنید. برای شروع شما باید node.js را بر روی سیستم خود نصب کنید. نصب Node.js وNPM و NPX:نود جی اس را میتوانید از این صفحه دانلود کنید و مراحل نصب را next بزنید تا بر روی کامپیوتر شما نصب شود. با نصب node ، npm و npx هم نصب خواهد شد. پس از نصب و راهاندازی نود جی اس ٬ ترمینال (CMD) را در پوشهای که قصد ایجاد پروژه را دارید باز کرده و دستور زیر را وارد کنید :
npx create-react-app my-app
پکیج منیجر نود جی اس شروع به دریافت فایلهای ری اکت کرده و یک پروژه ری اکت جدید را ایجاد میکند و کافی است به پوشه ساخته شده بروید و دستور npm start را در آن پوشه اجرا کنید. این دستور برنامه Node.js ای را اجرا میکند.
کامپوننت (Component)
کامپوننتها برای تقسیم پروژه به قسمتهای کوچکتر و مدیریت راحتتر آن ایجاد میشوند. کامپوننت ها را میشود به صورت تو در تو استفاده کرد و به هر اندازه که میخواهید از آنها درون یکدیگر استفاده کنید. برای نوشتن کامپوننت ۲ روش وجود دارد:
- با استفاده از توابع جاوا اسکریپت :
function Welcome(props) { return <h1>Hello{props.name}</h1>; }
- با استفاده از کلاس های ES6
class Welcome extends React.Component { render() { return <h1>Hello{this.props.name}</h1>; } }
استفاده از کامپوننت ساخته شده (Rendering a Component)
کامپوننتها برای تقسیم پروژه به قسمتهای کوچکتر و مدیریت راحتتر آن ایجاد میشوند. کامپوننتها را میشود به صورت تو در تو استفاده کرد و به هر اندازه که میخواهید از آنها درون یکدیگر استفاده کنید. برای نوشتن کامپوننت ۲ روش وجود دارد:
- با استفاده از توابع جاوا اسکریپت :
function Welcome(props) { return <h1>Hello{props.name}</h1>; } const element = <Welcome name="Sara" />; ReactDOM.render( element, document.getElementById('root'));
خروجی این کد را می توانید از اینجا مشاهده کنید.
دسته بندی کامپوننت ها
کامپوننتها را میتوان به دو دسته کلی تقسیم بندی کرد:
۱-Stateful Components
این نوع از کامپوننتها میتوانند در حالتهای مختلف خروجیهای مختلفی تولید کنند. تفاوت این دو نوع کامپوننت در state است ، برای استفاده از state آن را در constructor کلاس تعریف کنیم.. هر لحظه state را بررسی و با تغییر آن تابع render مجددا فراخوانی میشود. درون constructor باید ()super فراخوانی کرد. کاراین تابع constructor کلاس پدر خود را فراخوانی میکند. اگر این کار را انجام ندهید برنامه خطا میدهد.
class ReactStatefulComponent extends React.Component { constructor() { super(); this.state = { data: [ {id":1,"name":"Ali","age":"20"}, {"id":2,"name":"Reza","age":"30"}, {"id":3,"name":"Maryam","age":"40"} ] } } render() { return ( <div> <Header/> <table style={{width:'100%'}}> <tbody> { this.state.data.map((person, i) => <tr> <td>{i}</td> <td>{person.id}</td> <td>{person.name}</td> <td>{person.age}</td> </tr> ) } </tbody> </table> </div> ); } } class Header extends React.Component { render() { return ( <div> <h1>Header</h1> </div> ); } } export default ReactStatefulComponent;
میخوای یه فروشگاه به وسعت اینترنت داشته باشی؟
ما حرفهایترین فروشگاه آنلاین رو برات طراحی میکنیم.
۲-Stateless Components
کامپوننتهای بدون حالت(Stateless)، کامپوننتهایی استاتیک هستند که خروجی آنها ثابت است و به حالت (state) خاصی بستگی ندارد.
import React from 'react'; class ReactStatelessComponent extends React.Component { render() { return ( <div> <Header/> <Content/> </div> ); } } class Header extends React.Component { render() { return ( <div> <h1>Header</h1> </div> ); } } class Content extends React.Component { render() { return ( <div> <h2>Content</h2> <p>The content text!!!</p> </div> ); } } export default ReactStatelessComponent;
درمثال بالا مشاهده میکنید که ۳ کامپوننت مختلف نوشته شده است. هر سه این کامپوننتها Stateless یا بدون حالت هستند. کامپوننت Header و Content یک تگی دارند. این دو کامپوننت را در ReactStatelessComponent در کنار یکدیگر قرار داده و استفاده کردهایم. میتوان ReactStatelessComponent را در سایر فایلها Import کرد و از آن استفاده کرد. در خروجی این کامپوننت همان چیزهایی که در تگها وجود دارد بدون تغییر نمایش داده میشود همانند زیر:
Header
Content
The Content text!!!
Props
Props که ورودیهای کامپوننتها هستند، در واقع اطلاعاتی است که کامپوننتها نیاز دارند و این اطلاعات را از طریق attribute ها به آن میدهیم. همانند کد پایین که در کامپوننت welcome ،props آرگومان ورودی این کامپوننتuser است. تفاوت بین Props و State در این است که props قابلیت ویرایش ندارند و در واقع Read-Only هستند.
function Welcome(props) { return <h1>Hello, { props.name}</h1>; } const element = <Welcome name="Sara" />; ReactDOM.render( element, document.getElementById('root') );
برای تغییرات this.state نباید آن را به صورت مستقیم مقداردهی کرد. برای مقداردهی مستقیم از تابعی به نام setState استفاده میکنیم.
this.setState({react: 'The best website in the world'});
Component Life Cycle چرخه شروع کامپوننت
کامپوننتها یک چرخه زمانی دارند و شامل متدهایی هستند که با رخ دادن اتفاقات مختلف فراخوانی میشوند.
componentWillMount
بعد از constructor متد componentWillMount هم سمت سرور هم کلاینت فراخوانی میشود. اصطلاح mount به معنی قرار گرفتن کامپوننت درون DOM میباشد این متد قبل از Mount شدن کامپوننت اجرا میشود. کارهایی که نیاز دارید قبل از قرار داده شدن کامپوننت درون DOM انجام شود در این متد باید انجام دهید.
componentDidMount
بعد از اولین رندر متد componentDidMount تنها یک بار سمت سرویس گیرنده (client side) فراخوانی میشود، در این مکان است که درخواستهای AJAX و DOM یا به روز رسانی state رخ میدهد. این متد برای یکپارچگی با فریمورکهای جاوا اسکریپت و هر تابعی که اجرای آن با تأخیرهمراه است مانند setTimeout و setInterval استفاده میشود.
componentWillReceiveProps
به محض این که props تغییرکرد قبل از رندرشدن فراخوانی میشود.
shouldComponentUpdate
در این متد باید یک boolean بازگشت داده شود. اگر که false برگرداند کامپوننت مجددا render نخواهد شد که باعث جلوگیری از render مجدد و در نتیجه بهبود کارایی برنامه خواهد شد.
componentWillUpdate
اگرکه نتیجه shouldComponentUpdate مقدار true باشد این متد فراخوانی میشود. اگر هم از shouldComponentUpdate استفاده نکنید این متد باز هم فراخوانی میشود. در این متد نیز باید کارهایی که میخواهیم قبل از render مجدد اتفاق بیوفتد انجام میشود.
componentDidUpdate
این متد فقط یک بار پس از رندر مجدد کامپوننت فراخوانی میشود. این متد نیز مانند componentDidMount به صورت تضمینی یک بار در این چرخه اجرا میشود .
componentWillUnmount
بعد از اینکه اجزای سازنده از DOM جدا شدن فراخوانی میشود. ما اجزای خود را در js.main از DOM جدا میکنیم.