↕️

【React】shadcn/uiのAccordionの開閉を独自の変数で管理したい

に公開

概要

shadcn/uiのAccordionに関して、Accordionのドキュメントでは、AccordionItemのvalueによって開閉を制御できるようなサンプルが紹介されています。元になっているradix-uiのAccordionのAPIでは、これを独自の変数で管理できる設定が見てとれるのですが、少し分かりにくかったのでメモ書きしておきます。

前提

  • @radix-ui/react-accordionのバージョンは1.1.12です。

対応方法

Accordionコンポーネントにて、valueへAccordionItemに対応する値の変数、onValueChangeへsetterの関数をセットします。typeの属性がsingleの時はstring型、multipleの時はstring[]型が設定できるようになります。

実装サンプル

以下のような一つだけの要素を持つsingleのAccordionを例に、実装サンプルを記します。

export const SampleAccordionComponent: FC<Props> = ({}) => {
  const [accordionValue, setAccordionValue] = useState<string>("");

  // アコーディオンを開く関数
  const openAccordion = () => {
    setAccordionValue("childrenBlock");
  };

  return (
    <Accordion
      type="single"
      collapsible
      value={accordionValue}
      onValueChange={setAccordionValue}
    >
      <AccordionItem value="childrenBlock">
        <AccordionTrigger className="cursor-pointer">
          子設定の一覧
        </AccordionTrigger>
        {/* AccordionContentの中身は割愛 */}
        <AccordionContent>
        ・
        ・
        ・
        </AccordionContent>
      </AccordionItem>
    </Accordion>
  );
};

Discussion