1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【Chakra V3】ダイアログ(モーダル)を閉じるイベントを検知する

1
Posted at

はじめに

Chakra V3のモーダルを使用していて、モーダルが閉じる直前に処理を挟み込みたかったので、閉じるイベントを検知する方法を備忘として記事にします。

問題

公式ページから閉じるイベントを検知する方法が見つかりませんでした。

解決方法

DialogRootコンポーネントのonOpenChangeから検知できます。

現状は親コンポーネントのconst { open, setOpen, onToggle } = useDisclosure();から取得したonToggleをセットしているので、モーダルの開閉しか置きません。

修正前
import {
  DialogCloseTrigger,
  DialogContent,
  DialogRoot,
  DialogTitle,
} from "@/components/ui/dialog";

const InputModal: FC<Props> = ({
  open,
  onToggle,
}) => {
  // 省略

  return (
    <DialogRoot size={"sm"} open={open} onOpenChange={onToggle}>
      {/*省略*/}
    </DialogRoot>
  );
};

修正後
import {
  DialogCloseTrigger,
  DialogContent,
  DialogRoot,
  DialogTitle,
} from "@/components/ui/dialog";
+ import type { OpenChangeDetails } from "node_modules/@chakra-ui/react/dist/types/components/dialog/namespace";

const InputModal: FC<Props> = ({
  open,
  onToggle,
}) => {
  // 省略

+  const onOpenChange = (details: OpenChangeDetails) => {
+    const { open } = details;
+    if (open === false) {
+      console.log("📝モーダルが閉じる直前に発火!");
+    }
+    onToggle();
+  };

  return (
    <DialogRoot size={"sm"} open={open} onOpenChange={onToggle}>
      {/*省略*/}
    </DialogRoot>
  );
};

レコーディング 2026-01-17 204557.gif

おわりに

コンポーネントの型ファイルを追えばわかりましたが、ほかに良い方法がありましたら教えてください!

参考

JISOUのメンバー募集中!

プログラミングコーチングJISOUでは、新たなメンバーを募集しています。
日本一のアウトプットコミュニティでキャリアアップしませんか?
興味のある方は、ぜひホームページをのぞいてみてください!
▼▼▼
https://projisou.jp

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?