Khóa học ReactJS cơ bản đến nâng cao dành cho người mới bắt đầu của giảng viên Evondev
Bạn sẽ học được gì?
Nắm vững kiến thức về ReactJS cơ bản như props, state, components
Làm chủ được các hooks trong React
Biết cách quản lý State, tối ưu hiệu suất trong ReactJS Components
Mỗi chương sẽ luôn có bài tập kèm theo giúp bạn vừa học vừa thực hành mau nhớ kiến thức
Học được nhiều kiểu styles khác nhau trong ReactJS như styled-components, tailwindcss, sass, module css
Có nhiều dự án hấp dẫn trong quá trình học được hướng dẫn một cách chi tiết và dễ hiểu từ a đến z
Biết cách tối ưu Component, đặt tên sao cho chuẩn, các lỗi thường gặp và cách fix
Nắm vững các kiến thức nâng cao như HighOrderComponent, Compound Component, ContextAPI, Portal…
Và và rất nhiều nhiều kiến thức hay ho và bổ ích khác trong khóa học đang chờ đợi bạn
Giới thiệu khóa học
ReactJS đang là một thư viện phổ biến hiện nay đang được rất nhiều người dùng, và các nhà tuyển dụng cũng đang cần. Việc nắm vững kiến thức về ReactJS sẽ giúp các bạn có cơ hội có được việc làm cao hơn cũng như giúp bạn mau chóng trở thành 1 Frontend Developer thực thụ hơn. Với hàng trăm videos trong khóa học mình tin rằng khóa học sẽ cung cấp đủ kiến thức để giúp bạn đạt được những thành quả đó
Nội Dung Khóa Học ReactJS cơ bản đến nâng cao
Chương 1: Giới thiệu khóa học
Intro (Rất quan trọng)Cài đặt vscode extensions và settingsCài đặt NodeJS và Git scmCài đặt react dev tools và redux dev toolsCách đạt hiệu quả cao khi học khóa họcGiới thiệu outline khóa học
Chương 2: React cơ bản
Bài 1: Giới thiệu chương 2Bài 2: ReactJS là gì ?Bài 3: Tìm hiểu Create React AppBài 4: Cài đặt CRABài 5: JSX là gì ?Bài 6: Tìm hiểu JSX phần 1Bài 7: Tìm hiểu JSX phần 2Bài 8: Tìm hiểu JSX phần cuốiBài 9: Components là gì ?Bài 10: Props là gì ?Bài 11: Thực hành với Props cơ bảnBài 12: Tìm hiểu 2 cách styles cơ bản trong ReactBài 13: Rendering list phần 1Bài 14: Rendering list phần 2Bài 15: Rendering list phần 3Bài 16: Refactor codeBài 17: Tìm hiểu props childrenBài 18: Recap chương 2
Chương 3: Tìm hiểu react hook useState
Bài 19: Giới thiệu chương 3Bài 20: State là gì ?Bài 21: stateless và stateful functional componentsBài 22: Tìm hiểu useState cơ bản phần 1Bài 23: Tìm hiểu useState cơ bản phần 2Bài 24: Tìm hiểu useState cơ bản phần 3Bài 25: Tìm hiểu useState cơ bản phần 4Bài 26: Những nguyên tắc khi sử dụng hook cần nắmBài 27: Stale state là gì ?Bài 28: Thực hành game Tictactoe phần 1Bài 29: Thực hành game Tictactoe phần 2Bài 30: Thực hành game Tictactoe phần 3Bài 31: Thực hành game Tictactoe phần 4Bài 32: Thực hành game Tictactoe phần 5Bài 33: Xử lý state phức tạp như thế nào ?Bài 34: Tìm hiểu useReducer phần 1Bài 35: Tìm hiểu useReducer phần 2Bài 36: Tìm hiểu useReducer phần 3Bài 37: React cập nhật state như thế nào ?Bài 38: Recap chương 3
Chương 4: Styling trong React
Bài 39: Giới thiệu chương 4Bài 40: Cài đặt và sử dụng Sass cơ bảnBài 41: Tìm hiểu CSS ModuleBài 42: Cài đặt thư viện styled-componentsBài 43: Phân tích giao diện Card componentBài 44: Sử dụng styled-components phần 1Bài 45: Sử dụng styled-components phần 2Bài 46: Sử dụng styled-components phần 3Bài 47: Tìm hiểu props trong styled-componentsBài 48: Cách tạo Global styles trong styled-componentsBài 49: Tìm hiểu một cách sử dụng styled-components khácBài 50: So sánh 2 cách dùng của styled-componentsBài 51: Tìm hiểu Theme trong styled-componentsBài 52: Giới thiệu và cài đặt tailwindcssBài 52.1: Cập nhật CRA và TailwindCSS version 3(quan trọng)Bài 52.2: Hướng dẫn sửa lỗi TailwindCSS không tạo ra classBài 52.3: Lưu ý quan trọng phải xemBài 53: Sử dụng tailwindcss phần 1Bài 54: Cài đặt jitmode trong tailwindcssBài 55: Sử dụng tailwindcss phần 2Bài 56: Xử lý props trong tailwindcss như thế nàoBài 57: Recap chương 4
Chương 5: Tìm hiểu React hook useEffect
Bài 58: Giới thiệu chương 5Bài 59: Cách dùng useEffect cơ bảnBài 60: Thực hành với API Picsum photos sử dụng useEffect phần 1Bài 61: Thực hành với API Picsum photos sử dụng useEffect phần 2Bài 62: Thực hành với API Picsum photos sử dụng useEffect phần 3Bài 63: Thực hành với API Picsum photos sử dụng useEffect phần 4Bài 64: Thực hành với API Picsum photos sử dụng useEffect phần 5Bài 65: Refactor code sang async functionBài 66: Tìm hiểu dependency trong useEffect phần 1Bài 67: Tìm hiểu dependency trong useEffect phần 2Bài 68: Tìm hiểu dependency trong useEffect phần 3Bài 69: Tìm hiểu cleanup function trong useEffectBài 70: Sử dụng event listener trong useEffect như thế nào ?Bài 71: Tối ưu bài tập API Picsum PhotosBài 72: Bài tập HackerNews API phần 1Bài 73: Bài tập HackerNews API phần 2Bài 74: Bài tập HackerNews API phần 3Bài 75: Bài tập HackerNews API phần 4Bài 76: Tối ưu giao diện HackerNews APIBài 77: Bài tập HackerNews API - Fetching dữ liệu với buttonBài 78: Bài tập HackerNews API - Sử dụng useReducer phần 1Bài 79: Bài tập HackerNews API - Sử dụng useReducer phần 2Bài 80: Bài tập HackerNews API - Sử dụng useReducer phần cuốiBài 81: Recap chương 5
Chương 6: ref và custom hooks
Bài 82: Giới thiệu chương 6Bài 83: Tìm hiểu về ref cơ bảnBài 84: Sự khác nhau giữa hook useRef và hook useStateBài 85: Bài tập đồng hồ bấm giờ đơn giảnBài 86: Bài tập Input Auto FocusBài 87: Bài tập Textarea Resize phần 1Bài 88: Bài tập Textarea Resize phần 2Bài 89: Bài tập Dropdown phần 1Bài 90: Bài tập Dropdown phần 2Bài 92: Custom hook là gì ?Bài 93: Viết custom hook useLinkNewTab phần 1Bài 94: Viết custom hook useLinkNewTab phần 2Bài 95: Viết custom hook useHover phần 1Bài 96: Viết custom hook useHover phần 2Bài 97: Xử lý unmounted component với ref phần 1Bài 98: Xử lý unmounted component với ref phần 2Bài 99: Tối ưu bài tập HackerNewsAPI với custom hook phần 1Bài 100: Tối ưu bài tập HackerNewsAPI với custom hook phần 2Bài 101: Tối ưu bài tập HackerNewsAPI với custom hook phần 3Bài 102: Viết custom hook useClickOutSideBài 103: Bài tập SidebarMenu phần 1Bài 104: Bài tập SidebarMenu phần 2Bài 105: Recap chương 6
Chương 7: Form toàn tập
Bài 106: Giới thiệu chương 7Bài 107: Tìm hiểu Form cơ bản trong React phần 1Bài 108: Tìm hiểu Form cơ bản trong React phần 2Bài 109: Tìm hiểu Form cơ bản trong React phần 3Bài 110: Tìm hiểu Form cơ bản trong React phần 4Bài 111: Tìm hiểu Form cơ bản trong React phần 5Bài 112: Bài tập Movie Search App - Đăng ký APIBài 113: Bài tập Movie Search App - Fetching dữ liệuBài 114: Bài tập Movie Search App - Styling giao diệnBài 115: Bài tập Movie Search App - Hiển thị dữ liệuBài 116: Bài tập Movie Search App - Hiển thị dữ liệu tiếp theoBài 117: Bài tập Movie Search App - Chức năng tìm kiếmBài 118: Bài tập Movie Search App - Sử dụng kỹ thuật debounceBài 119: Bài tập Movie Search App - Giải thích hook useDebounceBài 120: Bài tập Movie Search App - Giới thiệu về loading skeletonBài 121: Bài tập Movie Search App - Thêm loading skeletonBài 122: Setup giao diện form cơ bảnBài 123: Cài đặt và sử dụng formik vào formBài 124: Validation cơ bản với formikBài 125: Validation cơ bản với formik tiếp theoBài 126: Validation với thư viện YupBài 127: Tối ưu source codeBài 128: Bài tập SignUpForm - Phân tích và code giao diệnBài 129: Bài tập SignUpForm - Chia nhỏ và tái sử dụng componentsBài 130: Bài tập SignUpForm - Tìm hiểu và sử dụng hook useFieldBài 131: Bài tập SignUpForm - Tối ưu components và validtionBài 132: Bài tập SignUpForm - Reset form và submittingBài 133: Cài đặt thư viện React Hook FormBài 134: Sử dụng React Hook Form cơ bảnBài 135: Validation cơ bảnBài 136: Sử dụng Yup cơ bảnBài 137: Các trạng thái trong React Hook Form p1Bài 138: Các trạng thái trong React Hook Form p2Bài 139: Tìm hiểu phương thức watchBài 140: Tìm hiểu phương thức ResetBài 141: Tìm hiểu phương thức setValues và setFocusBài 142: Tìm hiểu ControllerBài 143: Tìm hiểu useControllerBài 144: Tìm hiểu ControlBài 145: Recap formik và React Hook Form(RHF)Bài 146: Thực hành Register Form với RHF - SetupBài 147: Thực hành Register Form với RHF - StylingBài 148: Thực hành Register Form với RHF - Custom InputBài 149: Thực hành Register Form với RHF - Custom RadioBài 150: Thực hành Register Form với RHF - Custom CheckboxrefBài 151: Thực hành Register Form với RHF - Custom Dropdown phần 1Bài 152: Thực hành Register Form với RHF - Custom Dropdown phần 2Bài 153: Thực hành Register Form với RHF - Custom Dropdown phần 3Bài 154: Thực hành Register Form với RHF - Validation phần 1Bài 155: Thực hành Register Form với RHF - Validation phần 2Bài 156: Thực hành Register Form với RHF - Form submittingBài 157: Thực hành Register Form với RHF - Form reset phần 1Bài 158: Thực hành Register Form với RHF - Form reset phần 2Bài 159: Thực hành Register Form với Formik - SetupBài 160: Thực hành Register Form với Formik - Setup phần 2Bài 161: Thực hành Register Form với Formik - ValidationBài 162: Thực hành Register Form với Formik - Custom InputBài 163: Thực hành Register Form với Formik - Custom RadioBài 164: Thực hành Register Form với Formik - Custom CheckboxBài 165: Thực hành Register Form với Formik - Custom DropdownBài 166: Thực hành Register Form với Formik - Lấy giá trị từ DropdownBài 167: Thực hành Register Form với Formik - Reset formBài 168: So sánh formik và react-hook-form
Chương 8: Fragments, Portal
Bài 169: FragmentsBài 170: Vấn đề hay gặp khi làm việc với ModalBài 171: Tìm hiểu và sử dụng createPortalBài 172: Styling ModalBài 173: Thêm chức năng cho ModalBài 174: Xử lý overflow cho Dropdown với createPortalBài 175: Tooltip challengeBài 176: Giải bài tooltip phần 1Bài 177: Giải bài tooltip phần 2Bài 178: Bắt lỗi Component với react-error-boundaryBài 179: Kiểm tra Props của Component với PropTypesBài 180: Tối ưu code Portal nâng cao phần 1Bài 181: Tối ưu code Portal nâng cao phần 2Bài 182: Tối ưu code Portal nâng cao phần 3Bài 183: Tối ưu code Portal nâng cao phần 4Bài 184: Tối ưu code Portal nâng cao phần 5Bài 185: Tối ưu component TooltipsBài 186: Tối ưu component PortalBài 187: Recap kiến thức Portal
Chương 9: Context và Router
Bài 188: Giới thiệu ContextBài 189: Vấn đề thực tếBài 190: Thực hành CountContext phần 1Bài 191: Thực hành CountContext phần 2Bài 192: Thực hành AuthContext phần 1Bài 193: Thực hành AuthContext phần 2Bài 194: Thực hành GalleryContext - SetupBài 195: Thực hành GalleryContext - StylingBài 196: Thực hành GalleryContext - toggleFavoriteBài 197: Thực hành GalleryContext - addToCartBài 198: Thực hành GalleryContext - removeFromCartBài 199: Thực hành GalleryContext - Display countBài 200: Thực hành Gallery Context - usehooksBài 201: Thực hành Gallery Context - localStorageBài 202: Tìm hiểu React Router cơ bản phần 1Bài 203: Tìm hiểu React Router cơ bản phần 2Bài 204: Tìm hiểu React Router cơ bản phần 3Bài 205: Tìm hiểu React Router cơ bản phần 4
Chương 10: Dự án React Simple Movie
Bài 206: Thiết lập dự ánBài 207: Code giao diện menu và bannerBài 208: Code giao diện movie cardBài 209: Tìm hiểu và sử dụng thư viện Swiper, SWRBài 210: Tạo component MovieList và fetching dữ liệuBài 211: Tạo component BannerBài 212: Thiết lập Routes cho dự ánBài 213: Fetching dữ liệu trang danh sách phimBài 214: Trang chi tiết phim - Fetching dữ liệuBài 215: Trang chi tiết phim - Code giao diệnBài 216: Trang chi tiết phim - Fetching dữ liệu diễn viênBài 217: Trang chi tiết phim - Fetching dữ liệu trailers và similarBài 218: Thêm chức năng tìm kiếm phimBài 219: Thêm LoadingBài 220: Thêm chức năng phân trang - Phân tích chức năngBài 221: Thêm chức năng phân trang - Sử dụng react-paginateBài 222: Thêm chức năng phân trang - Tối ưu giao diệnBài 223: Tối ưu component ButtonBài 224: Tối ưu API ConfigBài 225: Tối ưu import path phần 1Bài 226: Tối ưu import path phần 2Bài 227: Recap lại kiến thức đã học và áp dụngBài 228: Code splitting RoutesBài 229: Tối ưu source code phần 1Bài 230: Tối ưu source code phần 2Bài 231: Tối ưu source code phần 3Bài 232: Chức năng Load more phần 1Bài 233: Chức năng Load more phần 2Bài 234: Chúc mừng bạn đã hoàn thành dự án
Chương 11: Advanced React
Bài 235: Giới thiệu chương 11Bài 236: Higher order components(hocs) phần 1Bài 237: Higher order components(hocs) phần 2Bài 238: Recap HOCsBài 239: Render props phần 1Bài 240: Render props phần 2Bài 241: Recap render propsBài 242: Custom hooksBài 243: React composition(Compound Component) phần 1Bài 244: React composition(Compound Component) phần 2Bài 245: React composition(Compound Component) phần 3Bài 246: Prop collectionsBài 247: Prop gettersBài 248: Control props phần 1Bài 249: Control props phần 2Bài 250: Control props phần 3Bài 251: State reducer phần 1Bài 252: State reducer phần 2Bài 253: State reducer phần 3Bài 254: Inversion of control phần 1Bài 255: Inversion of control phần 2Bài 256: Inversion of control phần 3Bài 257: Inversion of control phần 4Bài 258: Tối ưu Component re-render với useMemo, useCallback và React.memoBài 259: Recap chương 11
Chương 12: Firebase cơ bản
Bài 260: Giới thiệu và thiết lập FirebaseBài 261: Thiết lập Firestore DatabaseBài 262: Truy xuất dữ liệu Collection với getDocsBài 263: Thêm dữ liệu vào Collection với addDocBài 264: Xóa dữ liệu trong Collection với deleteDocBài 265: Hiển thị dữ liệu realtime với onSnapshotBài 266: Cập nhật dữ liệu với updateDocBài 267: Truy xuất 1 Document với getDocBài 268: Truy vấn dữ liệu nâng cao với Firestore QueriesBài 269: Giới thiệu và cài đặt Firebase AuthenticationBài 270: Thực hiện chức năng đăng ký với Firebase AuthBài 271: Thực hiện chức năng đăng xuất với Firebase AuthBài 272: Hiển thị displayName và tự động thêm Collection vào FirestoreBài 273: Thực hiện chức năng đăng nhập với Firebase Auth
Chương 13: Dự án Monkey Blogging
Bài 274: Giới thiệu chương 13Bài 275: Thiết lập FirebaseBài 276: Thiết lập RoutesBài 277: Tạo authContextBài 278: Code giao diện trang SignUp phần 1Bài 279: Code giao diện trang SignUp phần 2Bài 280: Label componentBài 281: Input component phần 1Bài 282: Input component phần 2Bài 283: Field componentBài 284: Xử lý toggle passwordBài 285: Button component phần 1Bài 286: Button component phần 2Bài 287: Xử lý Form Validation cho trang SignUp phần 1Bài 288: Xử lý Form Validation cho trang SignUp phần 2Bài 289: Hoàn thành chức năng đăng ký(SignUp Authentication)Bài 290: Thêm PropTypes cho Button componentBài 291: Code giao diện trang đăng nhập(SignIn)Bài 292: Hoàn thành chức năng đăng nhập(SignIn Authentication)Bài 293: Code giao diện block Header phần 1Bài 294: Code giao diện trang 404Bài 295: Code giao diện block Header phần 2Bài 296: Code giao diện block BannerBài 297: Lưu ý về giao diện nên xemBài 298: Tạo và tối ưu PostCategory componentBài 299: Tạo và tối ưu PostTitle componentBài 300: Tạo và tối ưu PostMeta componentBài 301: Tạo và tối ưu PostImage componentBài 302: Tối ưu chức năng Toggle PasswordBài 303: Lưu ý về giao diệnBài 304: Phân tích DatabaseBài 305: Chức năng thêm bài viết - Tổng quanBài 306: Chức năng thêm bài viết - Upload hình ảnhBài 307: Chức năng thêm bài viết - Tối ưu giao diện UploadBài 308: Chức năng thêm bài viết - Xóa hình ảnh và tối ưu logicBài 309: Chức năng thêm bài viết - Tối ưu code Upload hình ảnhBài 310: Chức năng thêm bài viết - Thêm toggle bài viết nổi bậtBài 311: Chức năng thêm bài viết - Truy vấn danh mục(category)Bài 312: Chức năng thêm bài viết - Chọn danh mục từ DropdownBài 313: Tối ưu code chức năng thêm bài viếtBài 314: Tối ưu code chức năng thêm bài viết tiếp theoBài 315: Truy xuất và hiển thị bài viết nổi bậtBài 316: Tối ưu SignUp componentBài 317: Tối ưu codeBài 318: Hiển thị thời gian của bài viếtBài 319: Lưu ý về giao diện tiếp theoBài 320: Chức năng thêm Danh mục phần 1Bài 321: Chức năng thêm Danh mục phần 2Bài 322: Hiển thị danh sách Danh mụcBài 323: Chức năng xóa Danh mụcBài 324: Chức năng cập nhật Danh mục phần 1Bài 325: Chức năng cập nhật Danh mục phần 2Bài 326: Chức năng tìm kiếm Danh mục phần 1Bài 327: Chức năng tìm kiếm Danh mục phần 2Bài 328: Chức năng tải thêm Danh mục phần 1Bài 329: Chức năng tải thêm Danh mục phần 2Bài 330: Hiển thị danh sách UserBài 331: Tối ưu cấu trúc dữ liệu của UserBài 332: Chức năng thêm User phần 1Bài 333: Chức năng thêm User phần 2Bài 334: Chức năng xóa UserBài 335: Chức năng cập nhật thông tin UserBài 336: Tối ưu chức năng xóa hình ảnh phần 1Bài 337: Tối ưu chức năng xóa hình ảnh phần 2Bài 338: Tối ưu cấu trúc dữ liệu bài viết phần 1Bài 339: Tối ưu cấu trúc dữ liệu bài viết phần 2Bài 340: Hiển thị danh sách bài viếtBài 341: Chức năng xóa bài viếtBài 342: Chức năng tìm kiếm, tải thêm bài viếtBài 343: Chức năng cập nhật bài viết phần 1Bài 344: Chức năng cập nhật bài viết phần 2Bài 345: Chức năng cập nhật bài viết phần 3Bài 346: Chức năng cập nhật bài viết phần 4Bài 347: Chức năng cập nhật bài viết phần 5Bài 348: Hiển thị thông tin tác giả bài viếtBài 349: Hiển thị bài viết liên quan phần 1Bài 350: Hiển thị bài viết liên quan phần 2Bài 351: Tối ưu thông tin user authenticationBài 352: Tối ưu source code phần 1Bài 353: Tối ưu source code phần 2
Chương 14: Redux toàn tập
Bài 354: Giới thiệu về ReduxBài 355: Cài đặt Create React App ReduxBài 356: Ví dụ đơn giản với component CounterBài 357: Sử dụng Redux core cho component CounterBài 358: Sử dụng Redux toolkit cho component CounterBài 359: Thực hành bài tập Toggle DarkMode phần 1Bài 360: Thực hành bài tập Toggle DarkMode phần 2Bài 361: Thực hành bài tập Toggle SidebarBài 362: Tìm hiểu Redux Middleware cơ bảnBài 363: Giới thiệu và cài đặt Redux SagaBài 364: Tìm hiểu Generator Function cơ bảnBài 365: Thực hành call API HackerNews với Redux Saga phần 1Bài 366: Thực hành call API HackerNews với Redux Saga phần 2Bài 367: Thực hành call API HackerNews với Redux Saga phần 3Bài 368: Thực hành call API HackerNews với Redux Saga phần 4Bài 369: Tìm hiểu extraReducersBài 370: Tìm hiểu Redux-thunk cơ bản
Chương 15: Dự án cuối khóa CrowFunding
Bài 371: Giới thiệu dự ánBài 372: Thiết lập styling và cấu trúc thư mụcBài 373: Code trang SignUp phần 1Bài 374: Code trang SignUp phần 2Bài 375: Code trang SignUp phần 3Bài 376: Code trang SignUp phần 4Bài 377: Code trang SignUp phần 5Bài 378: Code trang SignUp phần 6Bài 379: Code trang SignInBài 380: Tối ưu hiển thị classNameBài 381: Code giao diện Dashboard - TopbarBài 382: Code giao diện Dashboard - SidebarBài 383: Code component Campaign Item phần 1Bài 384: Code component Campaign Item phần 2Bài 385: Code component SearchBài 386: Code component Campaign PageBài 387: Tối ưu component ButtonBài 388: Thêm các components Textarea, Dropdown, EditorBài 389: Code giao diện trang Campaign View phần 1Bài 390: Code giao diện trang Campaign View phần 2Bài 391: Code modal Back This ProjectBài 392: Code chức năng thêm Campaign phần 1Bài 393: Code chức năng thêm Campaign phần 2Bài 394: Code chức năng thêm Campaign phần 3Bài 395: Code chức năng thêm Campaign phần 4
Chương 16: Zustand và Typescript toàn tập
Bài 0: Giới thiệu về chương Bonus và món quà cho học viênBài 1: Những câu hỏi phỏng vấn có thể gặp phần 1Bài 2: Những câu hỏi phỏng vấn có thể gặp phần 2Bài 3: Những câu hỏi phỏng vấn có thể gặp phần 3Bài 4: Một số kiến thức bổ sungBài 5: Tìm hiểu thư viện Zustand phần 1Bài 6: Tìm hiểu thư viện Zustand phần 2Bài 7: Giới thiệu TypescriptBài 8: Primitives typesBài 9: Structural typesBài 10: Thực hành với structural typesBài 11: Tuple, enum, any, union typesBài 12: unknow và never typesBài 13: InterfaceBài 14: Function overloadingBài 15: Intersection, assertions, casting typesBài 16: Function types bổ sung phần 1Bài 17: Function types bổ sung phần 2Bài 18: Tuple types bổ sungBài 19: Generic typesBài 20: Keyof trong Generic typesBài 21: Tìm hiểu Utility typesBài 22: Mapped typesBài 23: Conditional typesBài 24: in, keyof, typeofBài 25: Bài tập getDeepValueBài 26: Bài tập deepEqualCompareBài 27: Bài tập searchParamsDecodingBài 28: Bài tập ReplaceAllBài 29: Typescript React - TodoApp với useReducerBài 30: Typescript React - Sử dụng useState, useEffect, children propsBài 31: Typescript React - Viết custom hooks useTodosBài 32: Typescript React - Generic ComponentBài 33: Typescript React - HTMLDetailsProps và IntrinsicElements
Bạn nhận được gì?
Nhận link Google Drive ngay sau khi xác nhận thanh toán
Xem lại không giới hạn, sở hữu trọn đời
Bảo hành link trọn đời — lỗi được cấp lại miễn phí