如何在 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 應用程式中建立互動式且使用者友好的選項卡元件。

更新於:2023年7月17日

瀏覽量 1K+

開啟您的 職業生涯

透過完成課程獲得認證

開始學習
廣告