Thứ ba, 25/08/2020 | 00:00 GMT+7

Cách tạo thành phần tab bằng React

Nếu bạn đã từng xây dựng một ứng dụng web, rất có thể bạn đã xây dựng giao diện tài liệu theo thẻ tại điểm này hay lúc khác. Các tab cho phép bạn chia các giao diện phức tạp thành các phần phụ có thể quản lý được mà user có thể nhanh chóng chuyển đổi giữa các giao diện. Tab là một thành phần giao diện user phổ biến và rất quan trọng để hiểu cách triển khai.

Trong bài viết này, bạn sẽ học cách tạo thành phần chứa tab có thể tái sử dụng mà bạn có thể sử dụng bởi chính nó hoặc với các thành phần hiện có của bạn.

Yêu cầu

Trước khi bắt đầu hướng dẫn này, bạn cần các thành phần sau :

Hướng dẫn này đã được thử nghiệm trên Node.js version 10.20.1 và npm version 6.14.4.

Bước 1 - Tạo một dự án trống

Trong bước này, bạn sẽ tạo một dự án mới bằng Tạo ứng dụng React . Sau đó, bạn sẽ xóa dự án mẫu và các file liên quan được cài đặt khi bạn khởi động dự án.

Để bắt đầu, hãy tạo một dự án mới. Trong terminal của bạn, hãy chạy tập lệnh sau để cài đặt một dự án mới bằng cách sử dụng create-react-app :

  • npx create-react-app react-tabs-component

Sau khi dự án kết thúc, hãy thay đổi vào folder :

  • cd react-tabs-component

Trong cửa sổ hoặc tab terminal mới, hãy bắt đầu dự án bằng cách sử dụng tập lệnh bắt đầu Tạo ứng dụng React . Trình duyệt sẽ tự động làm mới các thay đổi, vì vậy hãy để tập lệnh này chạy trong khi bạn làm việc:

  • npm start

Thao tác này sẽ khởi động một server đang chạy local . Nếu dự án không mở trong cửa sổ trình duyệt, bạn có thể mở bằng cách truy cập http://localhost:3000/ . Nếu bạn đang chạy điều này từ một server từ xa, địa chỉ sẽ là http:// your_domain :3000 .

Trình duyệt của bạn sẽ tải với ứng dụng React mẫu được bao gồm như một phần của Tạo ứng dụng React:

Dự án mẫu phản ứng

Bạn sẽ xây dựng một tập hợp các thành phần tùy chỉnh hoàn toàn mới, vì vậy bạn cần bắt đầu bằng cách xóa một số mã soạn sẵn để bạn có thể có một dự án trống.

Để bắt đầu, hãy mở src/App.js trong editor . Đây là thành phần root được đưa vào trang. Tất cả các thành phần sẽ bắt đầu từ đây. Bạn có thể tìm thêm thông tin về App.js tại Cách cài đặt một dự án React với Tạo ứng dụng React .

Bạn sẽ thấy một file như thế này:

react-tab-component / src / App.js
import React from 'react'; import logo from './logo.svg'; import './App.css';  function App() {   return (     <div className="App">       <header className="App-header">         <img src={logo} className="App-logo" alt="logo" />         <p>           Edit <code>src/App.js</code> and save to reload.         </p>         <a           className="App-link"           href="https://reactjs.org"           target="_blank"           rel="noopener noreferrer"         >           Learn React         </a>       </header>     </div>   ); }  export default App; 

Xóa import logo from './logo.svg'; dòng import logo from './logo.svg'; . Sau đó, thay thế tất cả mọi thứ trong return tuyên bố quay trở lại một tập hợp các div thẻ và một h1 . Điều này sẽ cung cấp cho bạn một trang hợp lệ trả về h1 hiển thị Tabs Demo . Mã cuối cùng sẽ giống như sau:

react-tab-component / src / App.js
 import React from 'react'; import './App.css';  function App() {   return (     <div>       <h1>Tabs Demo</h1>     </div>   ); }  export default App; 

Lưu và thoát khỏi editor .

Cuối cùng, xóa logo. Bạn sẽ không sử dụng nó trong ứng dụng của bạn và bạn nên xóa các file không sử dụng khi làm việc. Nó sẽ giúp bạn khỏi nhầm lẫn về lâu dài.

Trong cửa sổ terminal , nhập lệnh sau để xóa logo:

  • rm src/logo.svg

Bây giờ dự án đã được cài đặt , bạn có thể tạo thành phần đầu tiên của bạn .

Bước 2 - Tạo thành phần Tabs

Trong bước này, bạn sẽ tạo một folder mới và thành phần Tabs sẽ hiển thị từng Tab .

Đầu tiên, tạo một folder trong folder src tên là components :

  • mkdir src/components

Bên trong folder components , tạo một file mới có tên Tabs.js :

  • nano src/components/Tabs.js

Thêm mã sau vào file Tabs.js mới:

react-tab-component / src / components / Tabs.js
import React, { Component } from 'react'; import PropTypes from 'prop-types'; import Tab from './Tab'; 

Đây là những nhập bạn cần để tạo thành phần này. Thành phần này sẽ theo dõi tab nào đang hoạt động, hiển thị danh sách các tab và nội dung b đang hoạt động.

Tiếp theo, thêm mã sau sẽ được sử dụng để theo dõi trạng thái và hiển thị tab đang hoạt động bên dưới các lần imports trong Tabs.js :

react-tab-component / src / components / Tabs.js
...  class Tabs extends Component {   static propTypes = {     children: PropTypes.instanceOf(Array).isRequired,   }    constructor(props) {     super(props);      this.state = {       activeTab: this.props.children[0].props.label,     };   }    onClickTabItem = (tab) => {     this.setState({ activeTab: tab });   }  ...  

Trạng thái ban đầu được thêm vào cho tab đang hoạt động và sẽ bắt đầu từ 0 trong mảng tab bạn sẽ tạo.

onClickTabItem sẽ cập nhật trạng thái ứng dụng cho tab hiện tại được user nhấp vào.

Đến đây bạn có thể thêm chức năng kết xuất của bạn vào cùng một file :

react-tab-component / src / components / Tabs.js
...    render() {     const {       onClickTabItem,       props: {         children,       },       state: {         activeTab,       }     } = this;      return (       <div className="tabs">         <ol className="tab-list">           {children.map((child) => {             const { label } = child.props;              return (               <Tab                 activeTab={activeTab}                 key={label}                 label={label}                 onClick={onClickTabItem}               />             );           })}         </ol>         <div className="tab-content">           {children.map((child) => {             if (child.props.label !== activeTab) return undefined;             return child.props.children;           })}         </div>       </div>     );   } }  export default Tabs; 

Thành phần này theo dõi tab nào đang hoạt động, hiển thị danh sách các tab và nội dung b đang hoạt động.

Thành phần Tabs sử dụng thành phần tiếp theo mà bạn sẽ tạo được gọi là Tab .

Bước 3 - Tạo thành phần Tab

Trong bước này, bạn sẽ tạo thành phần Tab mà bạn sẽ sử dụng để tạo các tab riêng lẻ.

Tạo một file mới có tên Tab.js bên trong folder components :

  • nano src/components/Tab.js

Thêm mã sau vào file Tab.js :

react-tab-component / src / components / Tab.js
 import React, { Component } from 'react'; import PropTypes from 'prop-types'; 

, bạn nhập Phản ứng từ react và nhập khẩu PropTypes . PropTypes là một propTypes tính propTypes đặc biệt được sử dụng để chạy kiểm tra kiểu trên các đạo cụ trong một thành phần.

Tiếp theo, thêm mã sau vào bên dưới các câu lệnh import :

react-tab-component / src / components / Tab.js
... class Tab extends Component {   static propTypes = {     activeTab: PropTypes.string.isRequired,     label: PropTypes.string.isRequired,     onClick: PropTypes.func.isRequired,   };    onClick = () => {     const { label, onClick } = this.props;     onClick(label);   }    render() {     const {       onClick,       props: {         activeTab,         label,       },     } = this;      let className = 'tab-list-item';      if (activeTab === label) {       className += ' tab-list-active';     }      return (       <li         className={className}         onClick={onClick}       >         {label}       </li>     );   } }  export default Tab; 

PropTypes trong thành phần này được sử dụng đảm bảo rằng activeTablabel là một chuỗi và được yêu cầu. onClick được cài đặt là một chức năng cũng được yêu cầu.

Thành phần Tab hiển thị tên b và thêm một lớp bổ sung nếu tab đang hoạt động. Khi được nhấp, thành phần sẽ kích hoạt một trình xử lý, onClick , sẽ cho thành phần Tabs biết tab nào nên hoạt động.

Bước 4 - Thêm CSS để tạo kiểu cho ứng dụng

Ngoài việc tạo các thành phần, bạn sẽ thêm CSS để cung cấp cho các thành phần dạng tab.

Bên trong file App.css , hãy xóa tất cả CSS mặc định và thêm mã này:

react-tab-component / src / App.css
 .tab-list {  border-bottom: 1px solid #ccc;   padding-left: 0; }  .tab-list-item {   display: inline-block;   list-style: none;   margin-bottom: -1px;   padding: 0.5rem 0.75rem; }  .tab-list-active {   background-color: white;   border: solid #ccc;   border-width: 1px 1px 0 1px; } 

Điều này sẽ làm cho các tab thẳng hàng và tạo đường viền cho tab active để làm cho nó nổi bật khi nhấp vào.

Bước 5 - Cập nhật App.js

Bây giờ các thành phần và kiểu liên kết đã có sẵn, hãy cập nhật Thành phần App để sử dụng chúng.

Trước tiên, hãy cập nhật các mục nhập để bao gồm thành phần Tabs :

react-tab-component / src / App.js
import React from 'react';  import Tabs from "./components/Tabs";  import "./App.css"; 

Tiếp theo, cập nhật mã trong câu lệnh trả về để bao gồm thành phần Tabs nhập:

...  function App() {   return (     <div>       <h1>Tabs Demo</h1>      <Tabs>         <div label="Gator">           See ya later, <em>Alligator</em>!         </div>         <div label="Croc">           After 'while, <em>Crocodile</em>!         </div>         <div label="Sarcosuchus">           Nothing to see here, this tab is <em>extinct</em>!         </div>       </Tabs>      </div>   ); }  export default App;  

Các div có nhãn được liên kết cung cấp nội dung của các tab.

Với các Tabs được thêm vào thành phần App , giờ đây bạn sẽ có giao diện tab đang hoạt động cho phép bạn chuyển đổi giữa các phần:

Thành phần tab React

Bạn có thể xem Kho lưu trữ Github này để xem mã đã hoàn thành.

Kết luận

Trong hướng dẫn này, bạn đã xây dựng một thành phần tab bằng React để quản lý và cập nhật trạng thái ứng dụng của bạn .

Từ đây, bạn có thể tìm hiểu các cách khác để tạo kiểu cho các thành phần React nhằm tạo ra một giao diện user hấp dẫn hơn nữa.

Bạn cũng có thể theo dõi toàn bộ loạt bài Cách viết mã trong React.js trên DigitalOcean để tìm hiểu thêm về cách phát triển với React.


Tags:

Các tin liên quan