React で並べ替え可能なテーブルを作成する

Irakli Tchigladze 2023年6月21日
React で並べ替え可能なテーブルを作成する

表を作成することは、Web サイトに大量の情報を表示するための最良の方法の 1つです。 最新の Web アプリケーションは通常、画面に表示する必要のある大量のデータを保存します。

ユーザーは、探しているものを見つけるために、何らかの方法でテーブルを並べ替えたりフィルターをかけたりすることを期待しています。 何千もの行を調べるように強制することは、UX の悪い習慣です。

最も簡単な解決策は、列をアルファベット順にソートできるテーブルを作成して、ユーザーが必要な情報を見つけられるようにすることです。

この記事では、React で並べ替え可能なテーブルを作成する方法について説明します。

React で並べ替え可能なテーブルを作成する

最初に、Web アプリケーションでテーブルを作成する方法について説明し、次にそれをソート可能にする方法を示します。

幸いなことに、HTML には非常に基本的な表を作成するための要素が組み込まれています。 これらの要素は、<table><thead><tr><th><tbody> などです。 HTML での表の作成について詳しく知りたい場合は、このガイド を参照してください。

この場合、すでに単純なテーブルを作成しています。 以下のコードを見てみましょう。

<table className="m-table">
        <thead>
          <tr>
            <th onClick={(e) => onSort(e, "firstName")}>First Name</th>
            <th onClick={(e) => onSort(e, "lastName")}>Salary</th>
          </tr>
        </thead>
        <tbody>
          {data.map(function (person, index) {
            return (
              <tr key={index} data-item={person}>
                <td data-title="firstName">{person.firstName}</td>
                <td data-title="lastName">{person.lastName}</td>
              </tr>
            );
          })}
        </tbody>
  </table>

簡単にするために、コンポーネント (および Web アプリケーション) をこの 1つのテーブルにします。

ご覧のとおり、テーブル ヘッダーを表す 2つの <th> 要素があります。 つまり、テーブルには 2つの列ラベルがあります。1つ目は First Name で、もう 1つ目は Salary です。

これらの各要素には、onClick ハンドラーがあり、event オブジェクトと、各列の値に関連付けられたプロパティ名の 2つの引数を使用して onSort() イベント ハンドラーを呼び出します。

<thead> 要素は以上です。

テーブル本体に移ると、map() メソッドを使用して data 配列のすべてのレコードを調べ、テーブル データ要素 (<td>) を持つテーブル行要素 (<tr>) を作成しました。 その key 属性を index に設定します。これは、React でエラーを回避するための標準的な方法です。

map() メソッドは、配列内のすべての項目を取得し、そのプロパティ firstNamelastName を読み取り、テーブルの行にこの情報を入力します。 これらのプロパティ名は、ヘッダーをクリックすると onSort() メソッドにも渡されることに注意してください。

React でテーブルの行を並べ替える

次に、テーブルのレコードを並べ替えることができるコンポーネントのビジネス ロジックを見てみましょう。 onSort() 関数は、テーブル内の値の並べ替えを処理します。

関数と data 状態変数に保存されているサンプル データを見てみましょう。

  const [data, updateData] = useState([
    { firstName: "Irakli", lastName: "Tcigladze" },
    { firstName: "George", lastName: "Smith" },
    { firstName: "Mark", lastName: "Wayans" },
    { firstName: "Michael", lastName: "Simmons" },
    { firstName: "Dirk", lastName: "Johnson" },
    { firstName: "Casey", lastName: "Dawson" }
  ]);
  const onSort = (event, sortKey) => {
    const tempData = [...data];
    updateData(tempData.sort((a, b) => a[sortKey].localeCompare(b[sortKey])));
  };

利用可能なデータは比較的標準的です。 人物を表すオブジェクトの配列があります。

onSort() 関数は 2つの引数を取ります。 これらは合成 event オブジェクトであり、これらの値をソートするためのキーです。

つまり、特定の値が格納されるオブジェクトのプロパティです。 テーブルの名前の値の場合、キーは firstName です。これは、名前を保持するオブジェクト プロパティであるためです。また、姓の場合は lastName です。

React では、状態データを直接変更してはならないため、アイテムを data 配列にコピーして tempData 変数に格納します。

次に、データ内の値を比較する方法を記述するコールバック関数の引数を受け入れる sort() 関数を使用します。 この場合、キー引数 (つまり、プロパティの名前) を使用して、各オブジェクトの firstName または lastName 値にアクセスします。

次に、localeCompare() メソッドを使用して、最初に来る値を決定します。 次に、それに応じてデータを配置します。

CodeSandbox で React のソート可能なテーブルを確認できます。 ヘッダー (列ラベル) の 1つをクリックしてみてください。データがアルファベット順に並べ替えられていることがわかります。

Irakli Tchigladze avatar Irakli Tchigladze avatar

Irakli is a writer who loves computers and helping people solve their technical problems. He lives in Georgia and enjoys spending time with animals.

LinkedIn

関連記事 - React Table