React・TypeScript・Material-UI(MUI)でSelectBoxのComponentを作成する方法

React_MUI_TS

こんにちはフロントエンドエンジニアのまさにょんです!

今回は、React・TypeScript・Material-UI(MUI)でSelectBoxのComponentを作成する方法について解説していきます。

Material-UI(MUI)でSelectBoxのComponentを作成する方法

React・TypeScript環境でのSelectBoxのComponent作成に、Material-UI(MUI)のSelectMenuItem を利用しました。

SelectBoxの要件定義とComponent導入イメージ

今回作成するSelectBoxComponentの要件定義は、次のとおりになります。

  1. SelectBoxの id と options は、必須にする。
  2. option の Data は{ id: number, value: string } の形のListにする。
  3. label と styleの設定はしてもしなくてもOKにする。

Component導入イメージは、次のような感じになります。

SelectBox_ComponentのSampleCode

SelectBox_ComponentのSampleCodeは、次のとおりです。

import { useState } from "react";
import { MenuItem, Select } from "@mui/material";
interface OptionType {
  id: number;
  value: string;
}
type OptionList = OptionType[];
interface StyleObj {
  [key: string]: string;
}
interface PropsType {
  id: string;
  label?: string;
  options: OptionList;
  style?: StyleObj;
}

// MUIのSelectを利用したSelecBox_Component
const SelectBox = (props: PropsType) => {
  const options = props.options;
  // 選択中の SelectBox の Option
  const [selectedOption, setSelectedOption] = useState<OptionType>(options[0]);
  // SelectBoxの変更を検知して、SelectOption を Setする
  const selectChangeCategory = (value: string | undefined) => {
    const findOption = options.find((opt) => opt.value === value);
    if (findOption) {
      setSelectedOption(findOption);
    }
  };

  return (
    <Select
      labelId={props.label ? props.label : ""}
      id={props.id}
      value={selectedOption.value ?? ""}
      onChange={(event) => selectChangeCategory(event.target.value)}
      style={props.style ? props.style : {}}
    >
      {options.map((option) => (
        <MenuItem key={option.id} value={option.value}>
          {option.value}
        </MenuItem>
      ))}
    </Select>
  );
};
export default SelectBox;

親コンポーネントからは、次のようにして、SelectBox_Componentを呼び出すことができます。

{/* SelectBox_Component_Test */}
<div>
  <SelectBox
    id="select_box_1"
    label="test_select_box"
    options={[
      { id: 1, value: "ロボ玉試作1号機" },
      { id: 2, value: "ロボ玉試作2号機" },
      { id: 3, value: "ロボ玉試作3号機" },
    ]}
    style={{
      width: "30%",
      height: "40px",
      margin: "0 auto",
      borderRadius: "10px",
      border: "solid 1px #e4e4e4",
      backgroundColor: "rgba(0, 0, 0, 0.04)",
      fontWeight: "900",
      color: "#707070",
    }}
  />
</div>

Twitterやってます!Follow Me!

神聖グンマー帝国の逆襲🔥

神聖グンマー帝国の科学は、世界一ぃぃぃぃぃぃ!!!!!

React関連の書籍

プログラミング学習・エンジニア転職関連の情報

自宅で現役エンジニアから学べる『TechAcademy』 (エンジニア転職保証)

『GEEK JOBキャンプ』スピード転職コース(無料)

【IT道場】入校時0円! 就職目的プログラミングスクール

エンジニア転職なら100%「自社開発」求人に強い【クラウドリンク】

『techgym』 (Python特化・無料)

最近の投稿