Open11

アイコンの入った選択肢を持つselectを作成したい(アクセシビリティを考慮して)

Koji KobayashiKoji Kobayashi

MUIのSelectでもできますね。
https://mui.com/material-ui/react-select/

import { Select, MenuItem } from "@mui/material";
import { FaAccessibleIcon } from "react-icons/fa";

export default function App() {
  return (
    <div className="App">
      <Select>
        <MenuItem>
          <FaAccessibleIcon />
          test
        </MenuItem>
      </Select>
    </div>
  );
}
Koji KobayashiKoji Kobayashi

MUIそのまま使えれば良いですが、カスタマイズしようとすると途端にハードルが高い。(と本人は感じているが、自作するハードルの方が高いです。)
なので、アクセシビリティの勉強も兼ねて自作してみようと。

Koji KobayashiKoji Kobayashi

selectを構成するためのroleとしてはlistboxを使用するようです。
https://developer.mozilla.org/ja/docs/Web/Accessibility/ARIA/Roles/listbox_role#ベストプラクティス
単純なdivなどを使用するので画像などを入れることができます。

Reactを使っていくとどういう流れになるか。

  • onClickで選択肢リストが開く
    • Portalで実現する?
  • 選択肢onClickで選択状態になり、リストが閉じる
    • Stateを更新する必要がありそうです。