如何在 ReactJS 中建立選項卡?
ReactJS 是一個流行的 JavaScript 庫,用於構建使用者介面。它提供了一種基於元件的 Web 開發方法,使建立互動式和動態 UI 元素更容易。選項卡是常用的 UI 模式,用於以使用者友好的方式組織和呈現內容。在本文中,我們將探討如何在 ReactJS 中建立選項卡元件。
先決條件
閱讀本文之前,您應該對 ReactJS 及其核心概念有基本的瞭解。確保您的機器上已安裝 Node.js 和 npm(Node 包管理器)。
設定新的 React 專案
首先,讓我們使用 Create React App(一個幫助建立具有基本專案結構的新 React 專案的工具)來設定一個新的 React 專案。開啟您的終端並執行以下命令:
npx create-react-app tab-example
方法 1:使用 UseRef Hook
useRef hook 是一個內建的 React hook,允許我們建立對元件中元素的可變引用。我們可以用它來管理選項卡元件中的活動選項卡狀態。
示例
在下面的程式碼中,我們首先匯入必要的依賴項並設定我們的函式元件 Tabs。在元件內部,我們建立一個名為 tabsRef 的 useRef hook 來儲存選項卡物件的陣列。這允許我們引用選項卡及其屬性。我們還使用 useState hook 建立一個名為 activeTab 的狀態變數來跟蹤當前活動的選項卡。handleTabClick 函式負責在單擊選項卡時更新 activeTab 狀態。renderTabs 函式迭代 tabsRef.current 陣列並呈現選項卡標題。它將“active”類新增到當前活動的選項卡。最後,我們返回選項卡和活動選項卡內容的 JSX 標記。
import React, { useRef, useState } from 'react'; import './Tabs.css'; // Import the CSS file const Tabs = () => { const tabsRef = useRef([{ title: 'Tab 1', content: 'Content 1' }, { title: 'Tab 2', content: 'Content 2' }, { title: 'Tab 3', content: 'Content 3' }]); const [activeTab, setActiveTab] = useState(0); const handleTabClick = (index) => { setActiveTab(index); }; const renderTabs = () => { return tabsRef.current.map((tab, index) => ( <div key={index} onClick={() => handleTabClick(index)} className={activeTab === index ? 'active' : ''} > {tab.title} </div> )); }; return ( <div className="tabs-container"> {renderTabs()} <div className="tab-content"> {tabsRef.current[activeTab].content} </div> </div> ); }; export default Tabs; return ( <div className="tabs-container"> {renderTabs()} <div className="tab-content"> {tabsRef.current[activeTab].content} </div> </div> ); }; export default Tabs;
輸出
方法 2:使用 useReducer Hook
useReducer hook 是另一個內建的 React hook,它提供了一種更井然有序的方式來管理複雜的狀態邏輯。我們可以利用此 hook 來處理選項卡的狀態更改。
示例
在下面的程式碼中,我們用一個空的“tabs”陣列和設定為 0 的“activeTab”屬性初始化狀態物件。透過正確初始化狀態物件,我們確保“state.tabs”陣列不會未定義,從而允許我們遍歷它並訪問選項卡物件及其屬性。
在“tab-content”div 中使用的“?.content”語法確保只有在當前選項卡物件已定義時才訪問 content 屬性。這可以防止切換選項卡時出現錯誤。
您可以根據您的特定設計要求自定義選項卡標題和內容的呈現。
import React, { useReducer } from 'react'; const reducer = (state, action) => { switch (action.type) { case 'SET_ACTIVE_TAB': return { ...state, activeTab: action.payload }; default: return state; } }; const Tabs = () => { const [state, dispatch] = useReducer(reducer, { tabs: [{ title: 'Tab 1', content: 'Content 1' }, { title: 'Tab 2', content: 'Content 2' }, { title: 'Tab 3', content: 'Content 3' } ], activeTab: 0 }); const handleTabClick = (index) => { dispatch({ type: 'SET_ACTIVE_TAB', payload: index }); }; const renderTabs = () => { return state.tabs.map((tab, index) => ( <div key={index} onClick={() => handleTabClick(index)} className={state.activeTab === index ? 'active' : ''} > {tab.title} </div> )); }; return ( <div className="tabs-container"> {renderTabs()} <div className="tab-content">{state.tabs[state.activeTab]?.content}</div> </div> ); }; export default Tabs;
輸出
方法 3:使用狀態和屬性
第三種方法涉及使用元件的狀態和屬性來管理活動選項卡。此方法更適合於選項卡邏輯不太複雜的簡單情況。
示例
在下面的程式碼中,我們在 Tabs 元件內定義“tabs”陣列,為選項卡標題和內容提供必要的資料。透過在元件內定義“tabs”陣列,我們確保它在元件的作用域內是可訪問的。useState hook 用於管理活動選項卡狀態,初始值設定為 0。handleTabClick 函式在單擊選項卡時更新活動選項卡。renderTabs 函式遍歷“tabs”陣列並呈現選項卡標題。“active”類根據 activeTab 狀態應用於活動選項卡。
tab-content div 顯示當前活動選項卡的內容。
import React, { useState } from 'react'; const Tabs = () => { const [activeTab, setActiveTab] = useState(0); // Define the tabs array within the component const tabs = [ { title: 'Tab 1', content: 'Content 1' }, { title: 'Tab 2', content: 'Content 2' }, { title: 'Tab 3', content: 'Content 3' } ]; const handleTabClick = (index) => { setActiveTab(index); }; const renderTabs = () => { return tabs.map((tab, index) => ( <div key={index} onClick={() => handleTabClick(index)} className={activeTab === index ? 'active' : ''} > {tab.title} </div> )); }; return ( <div className="tabs-container"> {renderTabs()} <div className="tab-content">{tabs[activeTab]?.content}</div> </div> ); }; export default Tabs;
輸出
結論
在本文中,我們討論瞭如何在 Reactjs 中建立選項卡。我們介紹了 useRef hook 用於管理可變引用,useReducer hook 提供了更結構化的狀態管理方法,以及狀態和屬性方法適用於更簡單的選項卡實現。通過了解這些技術,您可以在 React 應用程式中建立互動式且使用者友好的選項卡元件。