Trong phần 1 của series này, chúng ta tiến hành setup một project ReactJS bằng câu lệnh create-react-app
, đăng ký và tạo app trên firebase để có thể sử dụng và lưu trữ data. Trong phần 2 này, chúng ta sẽ tạo header cho nó và tạo component post để hiển thị bài đăng nhé 😉. Nào bắt đầu thôi 😁!
I. Tạo header cho app.
Đầu tiên, run project của chúng ta lên bằng câu lệnh npm start
, sau đó vào App.js
và xóa hết các đoạn code demo của React đi nhé, nhớ là xóa code trong thẻ <div id="app"></div>
, import logo from "./logo.svg";
thôi nhé 🤣, trong App.css
ta cũng xóa hết đi.
Trong folder src
ta tạo một folder components
đây là nơi chúng ta dùng để lưu trữ các component của chúng ta về sau, như hình dưới:
file App.js
là file gốc, chứa các component cha để render ra một page hoàn chỉnh. Cấu trúc trong file App.js
của chúng ta trong bài này sẽ như sau:
Trong folder components
ta tạo một folder với tên là Header
và trong nó tạo thêm 2 file là Header.jsx
và Style-Header.css
. Chúng ta sẽ code phần header và style cho nó trong hai file này, sau đó ta sẽ import
nó vào trong App.js
và sử dụng thôi 😁.
Trong Header.jsx
ta code như sau:
import React from "react";
import "./Style-Header.css";
export default function Header() {
return (
<div className="container">
<div className="header">
<div className="header__logo">
<img
src="https://www.instagram.com/static/images/web/mobile_nav_type_logo.png/735145cfe0a4.png"
alt="Logo"
/>
</div>
<div className="header__search">
<input type="text" placeholder="Tìm kiếm"/>
<i className='bx bx-search-alt-2' ></i>
</div>
<div className="header__login">
<button className="btn btn-login">Login</button>
</div>
</div>
</div>
);
}
import
component Header vào App.js
như hình.
Các icon mình sử dụng thằng Boxicon, các bạn có thể vào đây để lấy link css và thêm vào file index.html
ở folder public nhé 😉
Phần logo bạn có thể sử dụng luôn link ảnh của Instagram chính chủ nha 😁, nhớ phải import
css của header vào trong component Header nữa nhé. Sau khi xong ta sẽ được UI cơ bản như hình.
Chúng ta sẽ style cho phần header nào 😉, trong file Style-Header.css
ta thêm css cho nó như sau:
Ta sử dụng App.css
làm file css chung cho toàn bộ page của chúng ta, tức là có cái style nào mà dùng đi dùng lại hoặc dùng cho toàn bộ trang thì ta quăng ở đó 🤭.
Đây là thành quả của chúng ta 😁.
II. Tạo bài post cho app
Các bạn cũng có thể thấy là trong instagram có rất nhiều bài post theo thứ tự mới nhất đến cũ nhất, mỗi bài post như vậy ta gọi là một PostItem. Trong phần này ta sẽ tạo một PostItem để hiển thi một post mẫu nhé 😉.
Đây là một PostItem mẫu mình trích từ instagram của mình, những phần mình khoanh đỏ trong hình ảnh chính là những thứ mà chúng ta sẽ làm nhé còn lại chúng ta chưa quan tâm lúc này.
Trong folder components
tạo thêm một folder tên PostItem và trong nó tạo thêm 2 file PostItem.jsx
và Style-PostItem.css
. Tạo xong nhớ implement code và import
file css vào nhé 😁.
Cấu trúc của một bài Post như sau:
Phần Avatar chúng ta sử dụng material-ui nhá, để cài đặt bạn vào đây để copy lệnh cài đặt cũng như đọc docs của nó nếu có hứng thú nhé 😉 copy xong paste vào terminal để cài đặt.
Trong src
, tạo thêm folder assets để chứa image mà bạn muốn nhé, để có thể sử dụng ta tạo file ImageList.js
trong src
rồi copy code như bên dưới, mỗi lần dùng thì chỉ cần import
vào và dùng thôi nhé 😉.
import AVATAR from './assets/avatar/avatar-01.jpg';
export {AVATAR};
Lưu ý: Ở đây ta chỉ test khi tạo một PostItem thôi, khi có data từ firebase thì ta sẽ sử dụng image từ firebase sau.
Trong PostItem.jsx
các bạn code như bên dưới.
Phần css cho nó, ta làm như bên dưới.
Đây là code trong App.js
hiện tại của mình.
Đây là css chung trong App.css
hiện tại.
Và đây là thành quả nè 😋.
III. Tổng kết
Trong phần 2 này, mình đã hướng dẫn các bạn tạo phần header và bài post cho trang của chúng ta. Trong phần tiếp theo, chúng ta sẽ cùng nhau giải quyết chuyện render cả một đống các bài post nhưng thế nào, cách implement Firebase Database, cách truy cập Database, Authentication, và Storage từ Firebase nhé 😉.
Cảm ơn các bạn đã theo dõi, see u 😉!
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