【React】react-credit-cardsでおしゃれなクレジット情報入力フォームを作る

2021-06-08
hero画像

はじめに

おはようございます!こんにちは!こんばんは!
のふのふ(@rpf_nob)と申します!!都内のスタートアップでフロントエンドエンジニアとして働いています。

今回は React アプリケーションにおしゃれなクレジット情報入力フォームを作ることができる react-credit-cards という便利なライブラリを紹介します!!

  • 概要
  • react-credit-cards のインストール
  • react-credit-cards の使用方法
  • ソースとデモ
  • まとめ

概要

React 用のおしゃれにクレジットカードを表示するコンポーネントです。

以下公式の README.md に使用方法が説明されていますので詳細はこちらを見てください。

react-credit-cards のインストール

お好きなほうでインストールしてください。

npm install --save react-credit-cards
or
yarn add react-credit-cards

react-credit-cards の使用方法

入力フォームを作る

まず普通にカード番号、名前、有効期限、セキュリティコードを入力するためのフォームを作成します。 useStateで入力の状態を管理して、onChangeで状態を更新する React の基本的な実装です。

import { useState } from "react";

export default function App() {
  const [number, setNumber] = useState("");
  const [name, setName] = useState("");
  const [expiry, setExpiry] = useState("");
  const [cvc, setCvc] = useState("");

  return (
    <div className="App">
      <form>
        <input
          type="tel"
          name="number"
          placeholder="Card Number"
          value={number}
          onChange={(e) => setNumber(e.target.value)}
        />
        <input
          type="text"
          name="name"
          placeholder="Name"
          value={name}
          onChange={(e) => setName(e.target.value)}
        />
        <input
          type="text"
          name="expiry"
          placeholder="MM/YY"
          value={expiry}
          onChange={(e) => setExpiry(e.target.value)}
        />
        <input
          type="tel"
          name="cvc"
          placeholder="CVC"
          value={cvc}
          onChange={(e) => setCvc(e.target.value)}
        />
      </form>
    </div>
  );
}

どのフォームにフォーカスが当たっているかを管理する

focusという状態を作成して、それぞれの入力フォームにフォーカスが当たった時に入力フォームの名前を保存します。

import { useState } from "react";

export default function App() {
  const [number, setNumber] = useState("");
  const [name, setName] = useState("");
  const [expiry, setExpiry] = useState("");
  const [cvc, setCvc] = useState("");
  const [focus, setFocus] = useState("");
  return (
    <div className="App">
      <form>
        <input
          type="tel" name="number" placeholder="Card Number" value={number}
          onChange={(e) => setNumber(e.target.value)}
          onFocus={(e) => setFocus(e.target.name)}        />
        <input
          type="text" name="name" placeholder="Name" value={name}
          onChange={(e) => setName(e.target.value)}
          onFocus={(e) => setFocus(e.target.name)}        />
        <input
          type="text" name="expiry" placeholder="MM/YY" value={expiry}
          onChange={(e) => setExpiry(e.target.value)}
          onFocus={(e) => setFocus(e.target.name)}        />
        <input
          type="tel" name="cvc" placeholder="CVC" value={cvc}
          onChange={(e) => setCvc(e.target.value)}
          onFocus={(e) => setFocus(e.target.name)}        />
      </form>
    </div>
  );
}

カードコンポーネントを設置する

react-credit-cardsから Cards コンポーネントと CSS ファイルをインポートして、Cards コンポーネントを表示したい箇所に設置します。 props で各入力フォームの状態とフォーカスしている入力フォームの名前を渡してあげます。

import { useState } from "react";
import Cards from "react-credit-cards";import "react-credit-cards/es/styles-compiled.css";
export default function App() {
  const [number, setNumber] = useState("");
  const [name, setName] = useState("");
  const [expiry, setExpiry] = useState("");
  const [cvc, setCvc] = useState("");
  const [focus, setFocus] = useState("");

  return (
    <div className="App">
      <Cards        number={number}        name={name}        expiry={expiry}        cvc={cvc}        focused={focus}      />      <form>
        <input
          type="tel" name="number" placeholder="Card Number" value={number}
          onChange={(e) => setNumber(e.target.value)}
          onFocus={(e) => setFocus(e.target.name)}
        />
        <input
          type="text" name="name" placeholder="Name" value={name}
          onChange={(e) => setName(e.target.value)}
          onFocus={(e) => setFocus(e.target.name)}
        />
        <input
          type="text" name="expiry" placeholder="MM/YY" value={expiry}
          onChange={(e) => setExpiry(e.target.value)}
          onFocus={(e) => setFocus(e.target.name)}
        />
        <input
          type="tel" name="cvc" placeholder="CVC" value={cvc}
          onChange={(e) => setCvc(e.target.value)}
          onFocus={(e) => setFocus(e.target.name)}
        />
      </form>
    </div>
  );
}

ソースとデモ

下の Codesandbox でソースと動きを確認できて、以下のような動きが確認できるので触ってみてください。

  • 入力フォームに情報を入力していくとカードにも反映されていきます
  • カード番号の頭 1,2 文字でカード会社が識別できるので、それを元にカードの見た目も変化します
  • セキュリティコードは裏面にあるのでフォーカスがセキュリティコード入力欄に当たると、カードが裏面になります

まとめ

今回は React アプリケーションにおしゃれなクレジット情報入力フォームを作ることができる react-credit-cards という便利なライブラリを紹介しました!!

クレジットカード情報を入力する必要があった場合に今後使ってみたいと思います!

今後も便利な React のライブラリなどを紹介していきたいと思います!! よろしければまた見てください!!!



最後まで見ていただきありがとうございます!! この記事が良かったと思ったら SHARE していただけると泣いて喜びます 🤣


©2020-2023.のふのふ🀄All Rights Reserved.