Reactアプリで国旗選択を簡単に実装する方法:react-flags-selectの使い方

Posted at 2024 年 09 月 24 日

国旗を使った国選択機能を実装する際に便利なライブラリとして、react-flags-selectがあります。

このライブラリは、国際化対応や、多国籍データの取り扱いが必要なアプリケーションで活躍するライブラリです。

この記事では、このライブラリの導入方法から、基本的な使い方、さらにカスタマイズまでを説明します。

ドキュメント

インストール方法

まずは、react-flags-selectをインストールします。以下のコマンドを使用してください。

# npmを使用する場合
$ npm install react-flags-select --save

# yarnを使用する場合
$ yarn add react-flags-select

主要プロパティの一覧

以下は、react-flags-selectコンポーネントの主なプロパティとその使用例です。

※すべてのプロパティについて詳しく知りたい方はこちらをご覧ください。

プロパティ

タイプ

説明

サンプル

selected

string

現在選択されている国コードを保持します。

<ReactFlagsSelect selected={selected} />

onSelect

function

ユーザーが選択した国コードを取得するためのコールバック関数です。

<ReactFlagsSelect onSelect={code => setSelected(code)} />

placeholder

ReactNode

セレクト入力のプレースホルダーテキストを指定します。

<ReactFlagsSelect placeholder="国を選択してください" />

searchable

boolean
default:false

ドロップダウン内のオプションを検索可能にします。

<ReactFlagsSelect

searchable={true} />

searchPlaceholder

string

検索入力フィールドのプレースホルダーテキストを指定します。

<ReactFlagsSelect searchPlaceholder="国を検索" />

countries

array

表示する国コードのリストを指定します。

<ReactFlagsSelect countries={["US", "JP", "GB"]} />

blacklistCountries

boolean

default:false

countriesリストに含まれる国を非表示にします。

<ReactFlagsSelect countries={["US", "JP"]} blacklistCountries />

customLabels

object

国コードに対してカスタムラベルを指定します。

<ReactFlagsSelect customLabels={{ US: "アメリカ", JP: "日本" }} />

selectedSize

number

default:16

選択された国旗のサイズをピクセル単位で指定します。

<ReactFlagsSelect selectedSize={14} />

optionsSize

number

default:16

選択された国旗のサイズをピクセル単位で指定します。

<ReactFlagsSelect optionsSize={14} />

className

string

コンポーネントにカスタムCSSクラスを指定します。

<ReactFlagsSelect className="custom-class" />

fullWidth

boolean

default:true

セレクトコンポーネントをブロック要素として表示するか、インライン要素として表示するかを決定します。falseに設定すると、コンポーネントはインライン要素として表示されます。

<ReactFlagsSelect fullWidth={false} />

alignOptionsToRight

boolean

default:false

fullWidthfalseの場合に、ドロップダウンメニューの選択肢を右揃えにします。

<ReactFlagsSelect alignOptionsToRight /

disabled

boolean

default:false

セレクトコンポーネントを無効にします。無効化された場合、選択や操作ができなくなります。

<ReactFlagsSelect disabled />

実装方法

  • インポート

    まず、react-flags-selectをインポートします。

    import ReactFlagsSelect from 'react-flags-select';
  • 基本的な使い方
    import { useState } from 'react';
    import ReactFlagsSelect from 'react-flags-select';
    
    export default function FlagSelect() {
      const [selected, setSelected] = useState("");
    
      return (
        <div>
          <ReactFlagsSelect 
            selected={selected}
            onSelect={(code) => setSelected(code)}
            countries={["US", "GB", "JP", "FR", "DE"]}
            placeholder="国を選択してください"
          />
          <p>選択された国コード: {selected}</p>
        </div>
      );
    }
    

さらにカスタマイズしてみよう!

react-flags-selectは多くのカスタマイズオプションを提供しています。

この例では、countriesプロパティを使用して、United States、Great Britain、Japan、France、Germanyだけを選択肢として表示し、選択された国のコードを表示するプログラムを作成します。

import ReactFlagsSelect from "react-flags-select";
import { useState } from "react";
import "../styles/flagStyle.css";

export default function ReactFlags() {
  const [selected, setSelected] = useState("");

  return (
    <div className="container">
      <h2>Flags</h2>
      <ReactFlagsSelect
        selected={selected}
        onSelect={(code) => setSelected(code)}
        countries={["US", "GB", "JP", "FR", "DE"]}
        customLabels={{
          US: "United States",
          GB: "Great Britain",
          JP: "Japan",
          FR: "France",
          DE: "Germany",
        }}
        showSelectedLabel={true}
        showSecondarySelectedLabel={true}
        selectedSize={16}
        showOptionLabel={true}
        showSecondaryOptionLabel={true}
        optionsSize={16}
        placeholder={""}
        searchable={true}
        searchPlaceholder={"Search for a country"}
        alignOptionsToRight={false}
        fullWidth={true}
        disabled={false}
      />
      <p>選択された国: {selected}</p>
    </div>
  );
}

css

/* flagStyle.css */
.container{
    margin-left: 50px;
}
.ReactFlagsSelect-module_selectOptionValue__vS99- {
    padding: 5px 15px;
}
.ReactFlagsSelect-module_flagsSelect__2pfa2{
    width: 30%;
}

デモ結果

  • 未選択状態

デフォルトの国が指定されていない場合、プレースホルダーのみが表示されます。

  • 選択時

countries={…}に指定された国の国旗とラベルが表示されます。

  • 選択後

選択された国のコードが表示されます。

次は選択された国のコードとラベルが表示するプログラムの例です。

この例では、countriesが指定していないので、全ての国が表示されます。

import ReactFlagsSelect from "react-flags-select";
import { useState } from "react";
import countries from "i18n-iso-countries";
import "../styles/flagStyle.css";

export default function ReactFlags() {
  const [selected, setSelected] = useState({ code: "JP", name: "Japan" });
  countries.registerLocale(require("i18n-iso-countries/langs/en.json"));

  const handleSelect = (code: string) => {
    const countryName = countries.getName(code, "en") || code;
    setSelected({ code, name: countryName });
  };

  return (
    <div className="container">
      <h2>Flags</h2>
      <ReactFlagsSelect
        selected={selected.code}
        onSelect={handleSelect}
        customLabels={{
          US: "United States of America",
        }}
        showSelectedLabel={true}
        showSecondarySelectedLabel={true}
        selectedSize={16}
        showOptionLabel={true}
        showSecondaryOptionLabel={true}
        optionsSize={16}
        placeholder={""}
        searchable={true}
        searchPlaceholder={"Search for a country"}
        alignOptionsToRight={false}
        fullWidth={true}
        disabled={false}
      />
      <p>
        選択された国: {selected.name} ({selected.code})
      </p>
    </div>
  );
}

※CSSは前の例で使用したflagStyle.cssを再利用してください。

デモ結果

  • 未選択状態

デフォルトの国が表示されます。

  • 選択時

指定した国の国旗とラベルが表示されます。

  • 検索時

検索したキーワードと一致する国旗とラベルが表示されます。

  • 選択後

選択された国のコードとラベルが表示されます。

react-flags-selectを使えば、国旗と国名を簡単に選択できる機能を実装できます。

また、このコンポーネントは、言語選択などの多言語対応機能を実装する際にも活用できるでしょう。

国際化が求められるアプリケーションにおいて非常に役立つだけでなく、カスタマイズ性も高いため、プロジェクトの要件に合わせて柔軟に利用できます。

DevpediaCode編集部

DevpediaCodeはWeb、AI、Iot、ローコードなどプログラムに関する最新ITテーマの情報を発信するメディアです。

お問合せ下記のURLからお願いします。

https://devpediacode.com/contact