Reactでタブコンポーネントを構築する方法
序章
Webアプリを作成したことがある場合は、タブ付きのドキュメントインターフェイスを作成した可能性があります。 タブを使用すると、複雑なインターフェイスを管理可能なサブセクションに分割して、ユーザーがすばやく切り替えることができます。 タブは一般的なUIコンポーネントであり、実装方法を理解するために重要です。
この記事では、単独で、または既存のコンポーネントと一緒に使用できる、再利用可能なタブコンテナコンポーネントを作成する方法を学習します。
前提条件
このガイドを開始する前に、次のものが必要です。
- Node.jsを実行する開発環境が必要になります。 これをmacOSまたはUbuntu18.04にインストールするには、Node.jsをインストールしてmacOSにローカル開発環境を作成する方法またはのPPAを使用したインストール]セクションの手順に従います。 Ubuntu18.04にNode.jsをインストールする方法。
- このチュートリアルでは、 Create ReactAppを使用してアプリを作成します。 Create React Appを使用してアプリケーションをインストールする手順については、 CreateReactAppを使用してReactプロジェクトを設定する方法を参照してください。
- また、 JavaScriptでコーディングする方法にあるJavaScriptの基本的な知識と、HTMLおよびCSSの基本的な知識も必要です。 HTMLとCSSの優れたリソースは、 Mozilla DeveloperNetworkです。
このチュートリアルは、Node.jsバージョン10.20.1およびnpmバージョン6.14.4でテストされました。
ステップ1—空のプロジェクトを作成する
このステップでは、 Create ReactAppを使用して新しいプロジェクトを作成します。 次に、プロジェクトのブートストラップ時にインストールされたサンプルプロジェクトと関連ファイルを削除します。
まず、新しいプロジェクトを作成します。 ターミナルで次のスクリプトを実行し、create-react-app
を使用して新しいプロジェクトをインストールします。
npx create-react-app react-tabs-component
プロジェクトが終了したら、次のディレクトリに移動します。
cd react-tabs-component
新しいターミナルタブまたはウィンドウで、 CreateReactApp開始スクリプトを使用してプロジェクトを開始します。 ブラウザは変更時に自動更新されるため、作業中はこのスクリプトを実行したままにします。
npm start
これにより、ローカルで実行されているサーバーが起動します。 プロジェクトがブラウザウィンドウで開かなかった場合は、http://localhost:3000/
にアクセスしてプロジェクトを開くことができます。 これをリモートサーバーから実行している場合、アドレスはhttp://your_domain:3000
になります。
ブラウザには、CreateReactAppの一部として含まれているテンプレートReactアプリケーションが読み込まれます。
完全に新しいカスタムコンポーネントのセットを構築するので、空のプロジェクトを作成できるように、ボイラープレートコードをクリアすることから始める必要があります。
まず、テキストエディタでsrc/App.js
を開きます。 これは、ページに挿入されるルートコンポーネントです。 すべてのコンポーネントはここから始まります。 App.js
の詳細については、 Create ReactAppを使用してReactプロジェクトをセットアップする方法を参照してください。
次のようなファイルが表示されます。
react-tabs-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;
import logo from './logo.svg';
の行を削除します。 次に、return
ステートメントのすべてを置き換えて、div
タグのセットとh1
を返します。 これにより、タブデモを表示するh1
を返す有効なページが表示されます。 最終的なコードは次のようになります。
react-tabs-component / src / App.js
import React from 'react'; import './App.css'; function App() { return ( <div> <h1>Tabs Demo</h1> </div> ); } export default App;
テキストエディタを保存して終了します。
最後に、ロゴを削除します。 アプリケーションで使用することはありません。作業中に未使用のファイルを削除する必要があります。 長期的には混乱からあなたを救うでしょう。
ターミナルウィンドウで、次のコマンドを入力してロゴを削除します。
rm src/logo.svg
プロジェクトが設定されたので、最初のコンポーネントを作成できます。
ステップ2—Tabs
コンポーネントを作成する
このステップでは、新しいフォルダーと、各Tab
をレンダリングするTabs
コンポーネントを作成します。
まず、src
ディレクトリにcomponents
というフォルダを作成します。
mkdir src/components
components
フォルダー内に、Tabs.js
という名前の新しいファイルを作成します。
nano src/components/Tabs.js
次のコードを新しいTabs.js
ファイルに追加します。
react-tabs-component / src / components / Tabs.js
import React, { Component } from 'react'; import PropTypes from 'prop-types'; import Tab from './Tab';
これらは、このコンポーネントを作成するために必要なインポートです。 このコンポーネントは、アクティブなタブを追跡し、タブのリストとアクティブなタブのコンテンツを表示します。
次に、状態を追跡し、Tabs.js
のimports
の下にアクティブなタブを表示するために使用される次のコードを追加します。
react-tabs-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 }); } ...
初期状態はアクティブなタブに追加され、作成するタブの配列の0
から始まります。
onClickTabItem
は、ユーザーがクリックした現在のタブにアプリの状態を更新します。
これで、レンダリング関数を同じファイルに追加できます。
react-tabs-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;
このコンポーネントは、アクティブなタブを追跡し、タブのリストとアクティブなタブのコンテンツを表示します。
Tabs
コンポーネントは、作成する次のコンポーネントTab
を使用します。
ステップ3—Tab
コンポーネントを作成する
このステップでは、個々のタブを作成するために使用するTab
コンポーネントを作成します。
components
フォルダー内にTab.js
という名前の新しいファイルを作成します。
nano src/components/Tab.js
Tab.js
ファイルに次のコードを追加します。
react-tabs-component / src / components / Tab.js
import React, { Component } from 'react'; import PropTypes from 'prop-types';
もう一度、react
からReactをインポートし、PropTypes
をインポートします。 PropTypes
は、コンポーネントの小道具の型チェックを実行するために使用される特別なpropTypes
プロパティです。
次に、import
ステートメントの下に次のコードを追加します。
react-tabs-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
は、activeTab
およびlabel
が文字列であり、必須であることを確認するために使用されます。 onClick
も必要な機能に設定されています。
Tab
コンポーネントはタブの名前を表示し、タブがアクティブな場合はクラスを追加します。 クリックすると、コンポーネントはハンドラーonClick
を起動し、Tabs
コンポーネントにどのタブをアクティブにするかを知らせます。
ステップ4—アプリをスタイルするためのCSSの追加
コンポーネントの作成に加えて、CSSを追加して、コンポーネントにタブの外観を与えます。
App.css
ファイル内で、デフォルトのCSSをすべて削除し、次のコードを追加します。
[label react-tabs-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; }
これにより、タブがインラインになり、active
タブに境界線が表示され、クリックしたときに目立つようになります。
ステップ5—App.js
を更新する
コンポーネントと関連するスタイルが配置されたので、それらを使用するようにApp
コンポーネントを更新します。
まず、インポートを更新して、Tabs
コンポーネントを含めます。
react-tabs-component / src / App.js
import React from 'react'; import Tabs from "./components/Tabs"; import "./App.css";
次に、returnステートメントのコードを更新して、インポートされたTabs
コンポーネントを含めます。
... 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;
ラベルが関連付けられたdiv
は、タブにコンテンツを提供します。
Tabs
がApp
コンポーネントに追加されると、セクションを切り替えることができるタブ付きインターフェイスが機能するようになります。
このGithubリポジトリを表示して、完成したコードを確認できます。
結論
このチュートリアルでは、Reactを使用してタブコンポーネントを構築し、アプリケーションの状態を管理および更新しました。
ここから、スタイルのReactコンポーネントを使用して、さらに魅力的なUIを作成する他の方法を学ぶことができます。
また、DigitalOceanの How To Code in React.js シリーズ全体をフォローして、Reactを使用した開発の詳細を学ぶこともできます。