メインコンテンツへスキップ

CountrySelect

CountrySelectコンポーネントは、国を選択するための使いやすいドロップダウンを提供します。検索可能なリスト、国旗の表示、デスクトップとモバイルの両方のビューポートに適応するレスポンシブデザインが特徴です。react-hook-formで管理されるフォーム内での使用を想定して設計されています

CountrySelectコンポーネントは、国を選択するための使いやすいドロップダウンを提供します。検索可能なリスト、国旗の表示、デスクトップとモバイルの両方のビューポートに適応するレスポンシブデザインが特徴です。react-hook-formで管理されるフォーム内での使用を想定して設計されています。

Props

PropType説明必須デフォルト
valueCountryIso2選択された国のISO2コード(例:「us」)。はい
onChange(value: CountryIso2) => void国が選択されたときに呼び出されるコールバック関数。はい
namestring入力のname属性で、react-hook-formとの統合に使用されます。はい
sxSxPropsルート要素に適用されるカスタムスタイル。いいえ{}
showDialCodebooleantrueの場合、国のダイヤルコードがリストの名前の横に表示されます。いいえfalse

基本的な使用法

CountrySelectコンポーネントを使用するには、react-hook-formFormProviderでラップする必要があります。コンポーネントの状態はフォームコンテキストを介して管理されます。

Basic CountrySelect Example

tsx
import { FormProvider, useForm } from 'react-hook-form';
import { Box, Button, Typography } from '@mui/material';
import CountrySelect from '@blocklet/payment-react/src/components/country-select'; // 必要に応じてパスを調整
import type { CountryIso2 } from 'react-international-phone';

export default function BasicCountrySelect() {
  const methods = useForm<{ country: CountryIso2 }>({
    defaultValues: {
      country: 'us',
    },
  });

  const { handleSubmit, watch, setValue } = methods;
  const countryValue = watch('country'); // 変更を監視して制御されたコンポーネントを更新

  const onSubmit = (data: { country: CountryIso2 }) => {
    alert(`国: ${data.country} でフォームが送信されました`);
  };

  return (
    <FormProvider {...methods}>
      <form onSubmit={handleSubmit(onSubmit)}>
        <Box sx={{ display: 'flex', flexDirection: 'column', gap: 2, maxWidth: 400 }}>
          <Typography variant="h6">国を選択してください</Typography>
          <CountrySelect
            name="country"
            value={countryValue}
            onChange={(newCountry) => {
              setValue('country', newCountry, { shouldValidate: true });
            }}
          />
          <Button type="submit" variant="contained">
            送信
          </Button>
          <Typography>
            現在のフォーム値: {countryValue}
          </Typography>
        </Box>
      </form>
    </FormProvider>
  );
}

機能

検索とフィルタリング

コンポーネントにはドロップダウンリストの上部に検索バーがあり、ユーザーは国名、ISO2コード、またはダイヤルコードで国をすばやく見つけることができます。例えば、「+1」を検索すると、アメリカ合衆国とカナダが表示されます。

レスポンシブUI

デスクトップデバイスでは、CountrySelectは標準のドロップダウンメニューとして表示されます。モバイルデバイスでは、画面下部からスライドアップする全幅のダイアログに変わり、小さなデバイスでも最適化されたユーザーエクスペリエンスを提供します。

キーボードアクセシビリティ

CountrySelectは完全なキーボードナビゲーションをサポートしています。ユーザーはArrowUpキーとArrowDownキーでリストを移動し、Enterキーで国を選択し、Escapeキーでドロップダウンを閉じることができます。TabキーとShift+Tabキーでもリスト項目を順に移動できます。

フォーム統合

react-hook-formとシームレスに連携するように設計されています。選択が行われるとフォームの状態が自動的に更新されるため、FormProviderでラップする必要があります。

高度な使用法

ダイヤルコードの表示

showDialCodeプロパティをtrueに設定すると、リスト内の各国の電話ダイヤルコードを表示できます。

CountrySelect with Dial Code

tsx
import { FormProvider, useForm } from 'react-hook-form';
import { Box, Button } from '@mui/material';
import CountrySelect from '@blocklet/payment-react/src/components/country-select'; // 必要に応じてパスを調整
import type { CountryIso2 } from 'react-international-phone';

export default function CountrySelectWithDialCode() {
  const methods = useForm<{ country: CountryIso2 }>({
    defaultValues: {
      country: 'gb',
    },
  });

  const { handleSubmit, watch, setValue } = methods;
  const countryValue = watch('country');

  const onSubmit = (data: { country: CountryIso2 }) => {
    alert(`国: ${data.country} でフォームが送信されました`);
  };

  return (
    <FormProvider {...methods}>
      <form onSubmit={handleSubmit(onSubmit)}>
        <Box sx={{ display: 'flex', flexDirection: 'column', gap: 2, maxWidth: 400 }}>
          <CountrySelect
            name="country"
            value={countryValue}
            onChange={(newCountry) => setValue('country', newCountry)}
            showDialCode={true}
          />
          <Button type="submit" variant="contained">
            送信
          </Button>
        </Box>
      </form>
    </FormProvider>
  );
}

次のステップ

このコンポーネントは、より複雑なフォーム要素の構成要素です。完全な国際電話番号フィールドを作成するために、PhoneInputコンポーネントにどのように統合されているかを参照してください。