Trong phần 4 của series này, chúng ta sẽ tiếp tục hoàn thiện phần Guest Home Page . Lần này, chúng ta sẽ bắt tay vào code phần FAQs component, thực hiện config router để redirects qua lại các page nhé. Cùng bắt đầu thôi 😉!
I. Implement FAQ UI
Okie! Giờ chúng ta bắt đầu implement FAQ UI như hình bên dưới.
Trong folder components ta tạo tiếp component FAQs như sau:
Bạn có thể lên trang Home của Netflix (Nhớ là Guest Home Page nha) thì bạn có thể thấy, khi ta click vô icon +
thì nó sẽ dropdown phần content xuống như hình:
Như hình trên, mình cũng đã phân tích một chút về layout của đống này rồi, chúng ta bắt tay vào làm thôi 😁, đầu tiên trong file FAQs.jsx
chúng ta sẽ style cho những thứ cần thiết như sau:
Tiếp đến là /FAQs/index.jsx
:
Trong folder containers ta thêm file FAQsContainer.jsx
và thêm đoạn code sau:
Trong case này (trong file /FAQs/index.jsx
) mình dùng context để truyền đi những data cần thiết để chúng có thể giao tiếp với nhau. Như ở phần 1 mình đã trình bày, trong bài này chúng ta sẽ không đề cập sâu vào thằng context của react do đó mình chỉ giải thích sơ bộ về cách hoạt động của component trên với context nhé 😉.
Đầu tiên, Item
là phần sẽ wrap bên ngoài của phần Header
và Body
, do đó khi click vào Header
thì phần Body
sẽ được show ra bên dưới Header
và đồng thời icon của Header
cũng thay đổi tương ứng.
Mình đã tạo một context có tên là toggleContext
để lưu trữ nữa data phục vụ cho việc này, trong method Item
mình tạo một state là toggleShow
sau đó dùng <toggleContext.Provider>
wrap bên ngoài Item
và truyền giá trị của state vào thông qua value.
Lúc này trong phần Header
ta sẽ lấy giá trị từ context và sử dụng chúng để set value true/flase
(open or close). Trong phần Body
ta chỉ cần lấy giá trị context ra để handle là xong.
Demo:
- close.
- Open.
Tiếp theo, chúng ta sẽ làm phần Form đăng ký member trong phần của FAQs luôn nhé 😉.
- Tạo các file và thư mục như sau:
- Trong file
OptionForm.jsx
, ta code như sau:
- Trong
/OptionForm/index.jsx
, ta thêm đoạn code như sau:
Vì Button này thuộc phần FAQs luôn nên ta sẽ thêm nó vào trong file FAQsContainer.jsx
luôn nhé.
Okie! xong, chúng ta run thử xem thế nào.
Okie đẹp rồi nhé 😁.
II. Config router và phân chia các trang.
1. Config router.
Trước tiên ta cần cài thêm package react-router-dom
để có thể config router
nhé npm install react-router-dom
Sau khi install xong, trong folder src ta tạo folder và file như sau /constants/routes.js
và trong file routes.js
ta config như sau:
Chúng ta chỉnh sửa một chút trong containers nhé, trong folder containers ta tạo thêm index.jsx
và config như sau:
Trong file App.js
ta edit và thêm đoạn code như sau:
2. Phân chia các trang.
Một website thông thường sẽ có rất nhiều page, để website có thể redirects sang các page khác thì sẽ tuân theo một vài điều kiện nhất định. Đối với Netflix-clone hiện tại của chúng ta, mình sẽ chia trước các page như sau: Guest Home, SignUp, SignIn và Browse (Browse là gì thì mình sẽ nói sau nhé).
Trong folder src ta tạo thêm file như sau:
/src/pages/home.jsx
(Nếu có rồi thì thôi nhé):
/src/pages/signup.jsx
:
/src/pages/signin.jsx
:
/src/pages/browse.jsx
:
/src/pages/index.jsx
:
- Trong file
App.js
ta edit lại như sau:
import React from "react";
import { BrowserRouter, Route } from "react-router-dom";
import * as ROUTES from "./constants/routes";
import { Home, SignIn, SignUp, Browse } from "./pages/index";
export default function App() {
return (
<BrowserRouter>
<Route exact path={ROUTES.SIGN_IN}>
<SignIn />
</Route>
<Route exact path={ROUTES.SIGN_UP}>
<SignUp />
</Route>
<Route exact path={ROUTES.BROWSE}>
<Browse />
</Route>
<Route exact path={ROUTES.HOME}>
<Home />
</Route>
</BrowserRouter>
);
}
Okie! Cơ bản như vậy đã xong, thử xem work không nhé 😁.
III. Tổng kết.
Okie như vậy là đã xong, trong bài này, chúng ta đã code và hoàn thiện được phần FAQs của trang, apply context vào để quản lý các state, config router và phân chia các page cho app của chúng ta. Trong phần tiếp theo chúng ta sẽ hoàn thiện Guest Home page này luôn nhé 😉. Cảm hơn các bạn đã đọc! See u again!
TỪ QUỐC HƯNG
Đam mêm lập trình Frontend, Yêu thích việc setup workspace theo phong cách tối giản
follow me :
Bài viết liên quan
NodeJS là gì? Tại sao NodeJS lại phổ biến
Jul 09, 2024 • 8 min read
Event Loop là gì? Cơ chế hoạt động của Event Loop trong JavaScript
Jun 18, 2024 • 7 min read
So sánh Golang và NodeJS chi tiết
Oct 14, 2023 • 22 min read
Home Feed UI Instagram with TailwindCSS: Giới thiệu về series
Nov 28, 2022 • 2 min read
ReactJS Tutorial for Beginners Phần 2
Dec 12, 2021 • 3 min read
ReactJS vs React Native - Gà cùng một mẹ liệu có giống nhau?
Dec 12, 2021 • 14 min read