【TypeScript】Reactでラジオボタンを実装してみるよ!


1. ラジオボタンコンポーネントの作成

srcフォルダ内にRadioButton.tsxというファイルを作成し、ラジオボタンのコンポーネントを実装します

// src/RadioButton.tsx
import React from 'react';
import './RadioButton.css';

type RadioButtonProps = {
  label: string;
  value: string;
  checked: boolean;
  onChange: (value: string) => void;
};

const RadioButton: React.FC<RadioButtonProps> = ({ label, value, checked, onChange }) => {
  return (
    <label className="radio-button">
      <input
        type="radio"
        value={value}
        checked={checked}
        onChange={() => onChange(value)}
        className="radio-button__input"
      />
      <span className="radio-button__label">{label}</span>
    </label>
  );
};

export default RadioButton;

2. スタイリングの追加

ラジオボタンに簡単なスタイリングを追加するため、srcフォルダにRadioButton.cssというファイルを作成します

/* src/RadioButton.css */
.radio-button {
  display: flex;
  align-items: center;
  cursor: pointer;
}

.radio-button__input {
  display: none;
}

.radio-button__label {
  position: relative;
  padding-left: 24px;
  cursor: pointer;
}

.radio-button__label::before {
  content: '';
  position: absolute;
  left: 0;
  top: 50%;
  transform: translateY(-50%);
  width: 16px;
  height: 16px;
  border: 2px solid #007BFF;
  border-radius: 50%;
  background-color: #fff;
}

.radio-button__input:checked + .radio-button__label::after {
  content: '';
  position: absolute;
  left: 4px;
  top: 50%;
  transform: translateY(-50%);
  width: 8px;
  height: 8px;
  border-radius: 50%;
  background-color: #007BFF;
}

3. ラジオボタングループの作成

App.tsxでラジオボタングループを作成し、各ラジオボタンの状態管理を行います

// src/App.tsx
import React, { useState } from 'react';
import RadioButton from './RadioButton';
import './App.css';

const App: React.FC = () => {
  const [selectedValue, setSelectedValue] = useState<string>('option1');

  const handleRadioChange = (value: string) => {
    setSelectedValue(value);
  };

  return (
    <div className="App">
      <h1>Choose an option</h1>
      <RadioButton
        label="Option 1"
        value="option1"
        checked={selectedValue === 'option1'}
        onChange={handleRadioChange}
      />
      <RadioButton
        label="Option 2"
        value="option2"
        checked={selectedValue === 'option2'}
        onChange={handleRadioChange}
      />
      <RadioButton
        label="Option 3"
        value="option3"
        checked={selectedValue === 'option3'}
        onChange={handleRadioChange}
      />
    </div>
  );
};

export default App;

4. アプリケーションのスタイリング

必要に応じて、src/App.cssでアプリケーション全体のスタイリングを追加します

/* src/App.css */
.App {
  font-family: Arial, sans-serif;
  padding: 20px;
  text-align: center;
}

h1 {
  margin-bottom: 20px;
}

ぜひ、ご参考ください

是非フォローしてください

最新の情報をお伝えします