در قسمت قبل ، با useState Hook آشنا شدیم. همچنین چندین مثال را در مورد نحوهی تعریف تکی و یا چندتایی آن در یک کامپوننت تابعی، با انواع و اقسام دادههای مختلف، بررسی کردیم؛ اما بهتر است از کدام حالت استفاده شود؟ آیا بهتر است به ازای هر خاصیت state، یکبار useState Hook جدیدی را تعریف کنیم و یا بهتر است همانند کامپوننتهای کلاسی، یک شیء کامل را به همراه چندین خاصیت، به یک تک useState Hook معرفی کنیم؟ پیاده سازی یک فرم لاگین با استفاده ...
با استفاده از React Hooks که در نگارش 16.7.0 آن معرفی شدند، میتوان در کامپوننتهای تابعی «تا پیش از این» بدون حالت، به state و تمام قابلیتهای دیگر React، دسترسی یافت. جهت یادآوری، در قسمت 8 این سری، کامپوننتهای تابعی بدون حالت را معرفی کردیم. تا پیش از معرفی React Hooks، برای ردیابی تغییرات مقادیری خاص، میبایستی آنها را در خاصیت state کامپوننتهایی که به صورت کلاس تعریف شده بودند، قرار میدادیم. بنابراین class components، تنها نوع ...
در قسمت قبل ، دکمهی new movie را برای کاربران وارد نشدهی به سیستم، از صفحهی نمایش لیست فیلمها، مخفی کردیم. اما ... اگر آدرس http://localhost:3000/movies/new مستقیما در مرورگر وارد شود، هنوز هم برای عموم کاربران قابل دسترسی است.
روش محافظت از مسیریابیهای تعریف شدهی در برنامه
شبیه به روشی را که در قسمت قبل، برای انتقال شیء user، به مسیریابی کامپوننت Movies استفاده کردیم: <Route
path="/movies"
...
ارسال خودکار هدرهای ویژهی Authorization، به سمت سرور
در برنامهی backend این سری (که از انتهای مطلب قابل دریافت است)، به Controllers\MoviesController.cs مراجعه کرده و متدهای Get/Delete/Create آنرا با فیلتر [Authorize] مزین میکنیم تا دسترسی به آنها، تنها به کاربران لاگین شدهی در سیستم، محدود شود. در این حالت اگر به برنامهی React مراجعه کرده و برای مثال سعی در ویرایش رکوردی کنیم، اتفاقی رخ نخواهد داد:
ع ...
با توجه به اینکه React یک سیستم متشکل از کامپوننتهای کوچک و بزرگ است و از JSX جهت کدنویسی استفاده میکند و یک قالب HTML، متشکل از تمام عناصر به صورت درهم ریخته میباشد و بخشهای مختلفی دارد، امکان استفادهی مستقیم از قالب HTML در آن وجود ندارد و باید با فرمت React همخوانی داشته باشد. من در اینجا از قالب رایگان و راستچین شده AdminLTE که بر پایه بوت استرپ 4 میباشد استفاده کردهام. همانطور که میدانید React پوشهای را به نام public، مه ...
در قسمت قبل ، در هر دو حالت ثبت نام یک کاربر جدید و همچنین ورود به سیستم، یک JSON Web Token را از سرور دریافت کرده و در local storage مرورگر، ذخیره کردیم. اکنون قصد داریم محتوای این توکن را استخراج کرده و از آن جهت نمایش اطلاعات کاربر وارد شدهی به سیستم، استفاده کنیم. همچنین کار بهبود کیفیت کدهایی را هم که تاکنون پیاده سازی کردیم، انجام خواهیم داد.
نگاهی به محتوای JSON Web Token تولیدی
اگر مطلب قسمت قبل را پیگیری ...
میخواهیم به برنامهی لیست فیلمهایی که تا این قسمت تکمیل کردیم، امکانات جدیدی را مانند ورود به سیستم، خروج از آن، کار با JWT، فراخوانی منابع محافظت شدهی سمت سرور، نمایش و یا مخفی کردن المانهای صفحه بر اساس سطوح دسترسی کاربر و همچنین محافظت از مسیرهای مختلف تعریف شدهی در برنامه، اضافه کنیم.
برای قسمت backend، از همان برنامهی تکمیل شدهی قسمت قبل استفاده میکنیم که به آن تولید مقدماتی JWTها نیز ...
همان مثال backend قسمت 22 را با افزودن وب سرویسهایی برای قسمتهای نمایش لیست فیلمها، ژانرها و سایر صفحات اضافه شدهی به برنامهی تکمیل شدهی تا قسمت 21 ، توسعه میدهیم. کدهای کامل آن، به علت شباهت و یکی بودن نکات آن با مطلب 22، در اینجا تکرار نخواهند شد و میتوانید کل پروژهی آنرا از پیوست انتهای بحث دریافت کنید. سپس فایل dotnet_run.bat آنرا اجرا کنید تا در آدرس https://localhost:5001 قابل دسترسی شود.
افزودن سرویس httpS ...
پس از آشنایی با مقدمات کار با Axios، در این قسمت امکانات پیشرفتهتر آنرا مانند خطایابی سراسری، interceptors و ... بررسی میکنیم.
به روز رسانیهای خوشبینانهی UI
پیاده سازی اعمال CRUD توسط Axios در قسمت قبل ، به همراه یک مشکل مهم است: اعمال کار با شبکه و سرور، زمانبر هستند و مدتی طول میکشد تا پاسخ عملیات از سمت سرور دریافت شود. در این بین اگر خطایی رخ دهد، مابقی کدهای نوشته شدهی در متدهایی مانند Update و Dele ...
پس از نصب Axios در قسمت قبل ، جزئیات کار با آنرا در این بخش مرور میکنیم. دریافت اطلاعات از سرور، توسط Axios
- ابتدا به پوشهی sample-22-backend ای که در قسمت قبل ایجاد کردیم، مراجعه کرده و فایل dotnet_run.bat آنرا اجرا کنید، تا endpointهای REST Api آن، قابل دسترسی شوند. برای مثال باید بتوان به مسیر https://localhost:5001/api/posts در مرورگر دسترسی یافت (و یا همانطور که عنوان شد، از آدرس https://jsonplaceholder.typic ...