Pure React
Chúng ta hãy cùng bắt đầu học Reactjs với cách viết Pure React. Nói không với các bước compile, không với Webpack, Parcel, JSX mà chỉ có Javascript thuần tuý thôi. Vì mình biết nếu bây giờ nhảy thẳng vào các khái niệm đó, các bạn sẽ choáng ngợp bởi có quá nhiều khái niệm, và cũng không hiểu rằng tại sao họ lại dùng những thư viện đó và dùng nó khi nào nữa :)
Nào hãy cùng tạo một project tên là adopt-me mình lấy tên như này bởi mình muốn sử dụng API của trang Petfinder.com cho các bài hướng dẫn sau về xử lý kết quả trả về từ API. Và cũng vì lý do nhân văn là các bạn nên nhận nuôi một con thú cưng nhé hihi.
Mình khuyến khích các bạn lập trình sử dụng hệ điều hành Linux hoặc MacOs nó rất tiện cho bạn sử dụng dòng lệnh và thao tác nhanh chóng như dân lập trình Pro.
Chúng ta bắt đầu tạo một thư mục adopt-me, dưới thư mục chúng ta tạo một thư mục src lưu code và tạo một file index.html trong thư mục đó. Cách đơn giản là bạn mở terminal lên và gõ câu lệnh.
mkdir -p adopt-me/src && cd adopt-me/src && touch index.html
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta http-equiv="X-UA-Compatible" content="ie=edge"> <link rel="stylesheet" href="./style.css"> <title>Adopt Me</title> </head> <body> <div id="root">not rendered</div> <script src="https://unpkg.com/react@16.8.4/umd/react.development.js"></script> <script src="https://unpkg.com/react-dom@16.8.4/umd/react-dom.development.js"></script> <script> // Your code is going to go here </script> </body> </html>
- Đây là một trang HTML5 đơn giản. Nếu bạn chưa tìm hiểu về HTML5 bạn có thể đọc qua tại W3School
- Trong thẻ body có thẻ <div id="root"> đây là nơi mà React App sẽ được render sau này. Không nhất thiết bạn cần đặt tên chính xác là root mà bạn có thể đặt tên gì tuỳ ý.
- Chúng ta có hai thẻ script:
- Thẻ đầu tiên là thư viện core của React. Nó chứa interface API giúp bạn giao tiếp với thư viện này nhưng nó không chứa interface để cho phép bạn hiển thị thông tin ra trình duyệt.
- Thẻ thứ 2 được gọi là tầng rendering của React. Ở đây chúng ta đang lập trình Web nên sẽ sử dụng React DOM. Ngoài ra còn có React Native hoặc React VR, React Blessed ... cho các mục đích khác nhau. Thứ tự import là không quan trọng
- Thẻ script cuối cùng là nơi bạn đặt code của bạn tại đó
- Ở đây chúng ta sử dụng một file style.css. Bạn có thể tải nó về và đặt vào cùng thư mục với index.html
const App = () => { return React.createElement( "div", {}, React.createElement("h1", {}, "Adopt Me!") ); }; ReactDOM.render(React.createElement(App), document.getElementById("root"));
- Đầu tiên chúng ta tạo một tạo ra một Component tên là App và từ các Component này chúng ta lại tạo ra nhiều component con. Và cứ thế, cứ thế tạo dựng lên trang Web.
- Có hai kiểu component đó là function component và class component. Chúng ta đang dùng kiểu function component để tạọ ra App. Ơn chúa nhìn nó ngắn gọn hơn class component rất nhiều. Nếu bạn chưa biết điều này bạn có thể tìm hiểu qua bài biết này
- Một function compoment phải return ra một markup. Có thể là text, ở đây là trả về một element do React.createElement sinh ra.
- React.createElement tạo ra một instance của một component. Nếu chúng ta sử dụng string trong tham số thì nó sẽ tạo ra DOM tag giống với string đó. Trong đoạn code trên chúng ta đang dùng div và h1
- Tham số thứ 2 của hàm chúng ra đang sử dụng {}. Đây là tham số thuộc tính của thẻ tag. Ví dụ id, style, ...
- Tham số thứ 3 là các thẻ con nằm bên trong nó.
- Cuối cùng là hàm ReactDOM.render có chức năng gắn nội dung render ra được vào DOM tại thẻ div với id là root
const Pet = () => { return React.createElement("div", {}, [ React.createElement("h1", {}, "Luna"), React.createElement("h2", {}, "Dog"), React.createElement("h2", {}, "Havanese") ]); }; const App = () => { return React.createElement("div", {}, [ React.createElement("h1", {}, "Adopt Me!"), React.createElement(Pet), React.createElement(Pet), React.createElement(Pet) ]); }; ReactDOM.render(React.createElement(App), document.getElementById("root"));
- Để tạo ra nhiều phần tử con chúng ra sử dụng một mảng truyền vào trong hàm React.createElement
- Chúng ta cũng tạo ra một Pet Component chịu tránh nhiệm hiển thị thông tin của một đối tượng Pet. Cách tổ chức chia nhỏ chức năng giúp bạn quản lý code tốt hơn.
- Khi đã tạo Pet Component chúng ta có thể sử dụng nó nhiều lần :)
- Tham số thứ hai của React.createElement là không bắt buộc bạn có thể bỏ qua
- Nếu bạn dùng Google Chorme khi inspect trang web bạn sẽ thấy cảnh báo element required key. Tạm thời tại thời điểm này bạn bỏ qua điều đó.
const Pet = props => { return React.createElement("div", {}, [ React.createElement("h1", {}, props.name), React.createElement("h2", {}, props.animal), React.createElement("h2", {}, props.breed) ]); }; const App = () => { return React.createElement("div", {}, [ React.createElement("h1", {}, "Adopt Me!"), React.createElement(Pet, { name: "Luna", animal: "Dog", breed: "Havanese" }), React.createElement(Pet, { name: "Pepper", animal: "Bird", breed: "Cockatiel" }), React.createElement(Pet, { name: "Doink", animal: "Cat", breed: "Mix" }) ]); }; ReactDOM.render(React.createElement(App), document.getElementById("root"));
Mạnh dạn nói ‘Tôi đã sai’ là cách ta chấp nhận đối mặt với tình huống khó khăn. Việc đó có phần mạo hiểm nhưng những gì ta nhận được sẽ vượt ngoài sự mong đợi - Rich DeVos
Nhận xét
Đăng nhận xét