با ارائهی React Hooks، استفادهی از کامپوننتهای کلاسی، کمتر و کمتر شدهاند. اما جهت تکمیل و خاتمهی سری جاری، این نوع را نیز در این قسمت بررسی میکنیم. تعیین نوع props و state در کامپوننتهای کلاسی
برای این منظور ابتدا فایل جدید src\components\BigC.tsx را ایجاد کرده و سپس توسط میانبر rcc، ساختار ابتدایی این کامپوننت را ایجاد میکنیم. در ادامه آنرا در کامپوننت src\App.tsx استفاده خواهیم کرد:
یکی از م ...
پیشتر در مطلب « React 16x - قسمت 33 - React Hooks - بخش 4 - useContext Hook » با هوک useContext آشنا شدیم. در این قسمت میخواهیم نکات تایپاسکریپتی آنرا بررسی کنیم. ایجاد UserContext
فرض کنید برای انتقال دادههای کاربر وارد شدهی به سیستم، از روش انتقال props از بالاترین کامپوننت موجود در component tree به پایینترین کامپوننت آن، نیاز است از Context استفاده کنیم. به همین جهت فایل جدید src\contexts\userContext.tsx را با ...
در این قسمت قصد داریم یک هوک سفارشی را ایجاد کرده و نوعهای آنرا توسط TypeScript مشخص کنیم. همچنین در این بین از هوک useEffect هم استفاده خواهیم کرد؛ هرچند این هوک، نکات تایپاسکریپتی خاصی را به همراه ندارد. ایجاد هوک سفارشی useClickOutside
برای این منظور فایل جدید src\components\useClickOutside.tsx را ایجاد کرده و به صورت زیر تکمیل میکنیم: import { useEffect } from "react";
const useClickOutside = (ref, handl ...
هوک استاندارد useReducer، یک نمونهی پیچیدهتر هوک useState، برای مدیریت حالت است؛ با ساختاری شبیه به Redux، اما تنها مخصوص یک کامپوننت. هوک useReducer شبیه به یک نسخهی کوچک و محلی Redux است. در این قسمت، نحوهی تعیین نوعهای قسمتهای مختلف آنرا با TypeScript بررسی میکنیم.
ایجاد کامپوننت جدید ReducerButtons
برای توضیح مفاهیم این قسمت، فایل جدید src\components\ReducerButtons.tsx را به همراه محتوای زیر ایجاد میکن ...
پس از بررسی روش تعیین نوعهای خواص props در قسمتهای قبل ، اکنون نوبت به بررسی روش تعیین نوعهای انواع React Hooks است. در این قسمت دو هوک پرکاربرد useState و useRef را بررسی میکنیم.
روش تعیین نوع useState Hook
برای این منظور در ابتدا فایل جدید src\components\Input.tsx را ایجاد کرده و به صورت زیر تکمیل میکنیم: import React, { useState } from "react";
export const Input = () => {
const [name, setN ...
در قسمت قبل ، نوع توابع ارسالی از طریق props را تعیین کردیم. فرض کنید در همان مثال میخواهیم بجای ارسال یک رشته به فراخوان کامپوننت تعریف شده، اصل رخداد واقع شده را ارسال کنیم. به همین جهت onClick دریافتی را مستقیما به رخداد onClick، نسبت میدهیم: export const Button = ({ onClick }: Props) => {
return <button onClick={onClick}>Click Me</button>;
};
در این حالت بلافاصله با خطای زیر مواجه خواهیم شد که عنوان م ...
در قسمت قبل با معرفی نوع props توسط TypeScript، مجبور به تکمیل اجباری تک تک آنها شدیم؛ اما در React میتوان props را به صورت اختیاری و یا با مقادیری پیشفرض نیز تعریف کرد.
روش تعیین props پیشفرض توسط TypeScript
اگر بخواهیم توسط روشهای خود React، مقادیر پیشفرض props را تعیین کنیم، میتوان از defaultProps به صورت زیر با تعریف یک شیء جاوا اسکریپتی از پیش مقدار دهی شده، استفاده کرد: Head.defaultProps = {
...
React به صورت پیشفرض از ES6 برای توسعهی برنامههای خودش استفاده میکند؛ اما استفادهی از TypeScript با پروژههای React، مزایای قابل توجهی را مانند type checking در زمان کامپایل برنامه، دسترسی به intellisense آنی، امکان refactoring بهتر را در اختیار توسعه دهنده قرار میدهد که نه فقط سرعت و سهولت توسعه را افزایش میدهند، بلکه از بروز بسیاری از خطاهای زمان اجرای برنامه نیز جلوگیری میکند.
ایجاد پروژههای React مبتنی بر ...
در زبانهای برنامه نویسی، از loopها برای پیمایش عناصر یک مجموعه استفاده میشود. این پیمایش ممکن است صرفا جهت نمایش و یا دستکاری نمودن عناصر مجموعه، مورد استفاده قرار بگیرد (دستوراتی نظیر for,while,do while). کد زیر را در نظر بگیرید که در آن قصد داریم عناصر مجموعهای را تبدیل به حروف بزرگ کنیم. اینکار به طور معمول با استفاده از loopهای معمول، به شکل زیر انجام میشود: let names = ["Jack", "Jecci", "Ram", "Tom"];
let upperCaseNames = [ ...
تا اینجا کامپوننت صفحه بندی را به همراه اعمال آن به لیست نمایش داده شده، پیاده سازی کردیم. در ادامه میخواهیم لیست ژانرهای سینمایی را که در فایل fakeGenreService.js تعریف شدهاند: export const genres = [
{ _id: "5b21ca3eeb7f6fbccd471818", name: "Action" },
{ _id: "5b21ca3eeb7f6fbccd471814", name: "Comedy" },
{ _id: "5b21ca3eeb7f6fbccd471820", name: "Thriller" }
];
export function getGenres() {
return genres.filte ...