æ¬è¨äºã¯
Reactã¦ã£ã¼ã¯
2æ¥ç®ã®è¨äºã§ãã
ð
1æ¥ç®
â¶â¶ æ¬è¨äº â¶â¶
3æ¥ç®
ð±

- ã¯ããã«
- ã«ã¹ã¿ã ããã¯ã¨ã¯
- ã«ã¹ã¿ã ããã¯ã使ãã¡ãªãã
- å®éã«ä½ã£ã¦ã¿ã
- ã¾ã¨ã
ã¯ããã«
ããã«ã¡ã¯ãNRIãããã³ã ã®ä¸éã§ãã
å
æ¥é£ã¹ããã¼ã½ã³ã®ãã¶ã¯ã¶ã¯ã·ã§ã³ã©ãã¼ãºã±ã¼ããã®ãããããé ããé¢ããªã仿¥ãã®é ã§ãã
ä»åã¯Reactã¦ã£ã¼ã¯ã¨ãããã¨ã§ãã«ã¹ã¿ã ããã¯ã使ã£ã¦ã³ã³ãã¼ãã³ãããªãã¡ã¯ã¿ãªã³ã°ããæµããæ¸ãã¦ã¿ããã¨æãã¾ãã
Reactã¢ããªãéçºããããã«ãªã£ã¦2å¹´ãçµã¨ãã¨ãã¦ãã¾ãããæåã®ããã¯ã«ã¹ã¿ã ããã¯ã£ã¦ä½ï¼é£ãããã»ã»ã¨æ¬é ãã¦ããè¨æ¶ãããã¾ãã
å®éã«ãã£ã¦ã¿ãã¨æ¡å¤ç°¡åã«ä½ãã¾ããã使ãåæãè¯ãã®ã§ãã¾ã ã«ã¹ã¿ã ããã¯ä½ã£ããã¨ãªããï½ã¨ããæ¹ã®åã£æããã«ãªãã°å¹¸ãã§ãã
ã«ã¹ã¿ã ããã¯ã¨ã¯
ã«ã¹ã¿ã ããã¯ã¯ãReactã§ä½¿ãããåå©ç¨å¯è½ãªãã¸ãã¯ã®ãã¨ã§ãã
useStateãuseEffectã¨ãã£ãããã¯ãçµã¿åããã¦ç¬èªã®ãã¸ãã¯ã使ãããã¨ãã§ããã³ã³ãã¼ãã³ãéã§ã®åå©ç¨ãå¯è½ã«ãªãã¾ãã
ã«ã¹ã¿ã ããã¯ã使ãã¡ãªãã
ã«ã¹ã¿ã ããã¯ã使ãã¡ãªããã¯å¤§ãã2ç¹ããã¾ãã
ãã¸ãã¯ãåå©ç¨ã§ãã
ã³ã¼ãã®å¯èªæ§ãä¸ãã
è¤æ°ã®ã³ã³ãã¼ãã³ãã§ä½¿ç¨ãããå¯è½æ§ã®ããç¶æ
管çããã¸ãã¯ãã«ã¹ã¿ã ããã¯ã¨ãã¦ä½ããã¨ã§ãéè¤ããã³ã¼ããçã¾ãããã¨ãé¿ãããã¨ãã§ãã¾ãã
ã¾ããåå©ç¨æ§ã®é«ãã«ã¹ã¿ã ããã¯ã使ãããã¨ã§ã¢ããªã±ã¼ã·ã§ã³å
¨ä½ã®å¯èªæ§ãæè»æ§ãåä¸ããéçºå¹çãã¢ãããã¾ãã
å®éã«ä½ã£ã¦ã¿ã
ã§ã¯ãã£ãããã«ã¹ã¿ã ããã¯ãä½ã£ã¦ã¿ã¾ãããã
ã¾ãã¯ç°¡åãªã¡ãã¥ã¼ã³ã³ãã¼ãã³ãã使ãã¾ããä»åã¯MUIã使ã£ã¦å®è£
ãã¦ãã¾ãã
mui.com
ã¡ãã¥ã¼ã³ã³ãã¼ãã³ã

SampleMenu.tsx
import { useState } from "react"; import { Button, Menu, MenuItem } from "@mui/material"; export const SampleMenu = () => { // ã¡ãã¥ã¼ã表示ããããã®ã¢ã³ã«ã¼ãã¤ã³ãï¼ãã¿ã³è¦ç´ ï¼ã管ç const [menuAnchorEl, setMenuAnchorEl] = useState<null | HTMLElement>(null); const handleButtonClick = (event: React.MouseEvent<HTMLButtonElement>) => { setMenuAnchorEl(event.currentTarget); }; const handleMenuClose = () => { setMenuAnchorEl(null); }; return ( <div> <Button variant="contained" onClick={handleButtonClick}> Open Menu </Button> <Menu open={Boolean(menuAnchorEl)} onClose={handleMenuClose} anchorEl={menuAnchorEl} > <MenuItem onClick={handleMenuClose}>ã¡ãã¥ã¼1</MenuItem> <MenuItem onClick={handleMenuClose}>ã¡ãã¥ã¼2</MenuItem> <MenuItem onClick={handleMenuClose}>ã¡ãã¥ã¼3</MenuItem> </Menu> </div> ); };
ãã¿ã³ãã¯ãªãã¯ããã¨handleButtonClick颿°ãå¼ã°ããã¡ãã¥ã¼ã表示ããã¾ã
ã¡ãã¥ã¼ã¢ã¤ãã ãã¯ãªãã¯ããã¨handleMenuClose颿°ãå¼ã°ããã¡ãã¥ã¼ãéãã¾ã
ãã®ç¶æ
ããã¡ãã¥ã¼ééãã«ã¹ã¿ã ããã¯ã¨ãã¦åé¢ããä»ã®ã³ã³ãã¼ãã³ããããå©ç¨ã§ãããããªãã¡ã¯ã¿ãªã³ã°ãã¦ã¿ã¾ãã
ã«ã¹ã¿ã ããã¯ã¯"use"ããå§ã¾ãååã«ããã¨ããã«ã¼ã«ãããã®ã§ãuseMenuã¨ããååã§ä½ãã¾ãã
useMenu.ts
import { useState } from 'react'; export const useMenu = () => { const [menuAnchorEl, setMenuAnchorEl] = useState<null | HTMLElement>(null); const handleButtonClick = (event: React.MouseEvent<HTMLButtonElement>) => { setMenuAnchorEl(event.currentTarget); }; const handleMenuClose = () => { setMenuAnchorEl(null); }; return { menuAnchorEl, handleButtonClick, handleMenuClose, }; };
SampleMenu.tsx
import { Button, Menu, MenuItem } from '@mui/material'; import { useMenu } from './useMenu'; export const SampleMenu = () => { const { handleButtonClick, menuAnchorEl, handleMenuClose } = useMenu(); return ( <div> <Button variant='contained' onClick={handleButtonClick}> Open Menu </Button> <Menu open={Boolean(menuAnchorEl)} onClose={handleMenuClose} anchorEl={menuAnchorEl}> <MenuItem onClick={handleMenuClose}>ã¡ãã¥ã¼1</MenuItem> <MenuItem onClick={handleMenuClose}>ã¡ãã¥ã¼2</MenuItem> <MenuItem onClick={handleMenuClose}>ã¡ãã¥ã¼3</MenuItem> </Menu> </div> ); };
useMenuã«ã¡ãã¥ã¼ééã®ãã¸ãã¯ãã¾ãã£ã¨ç§»è¡ããSampleMenuããuseMenuãå¼ã³åºãããã«ãªãã¾ããã
ç¶æ
管çã®é¨åãã«ã¹ã¿ã ããã¯ã«åé¢ãããã¨ã§ããç°¡æ½ã§åå©ç¨æ§ã®é«ãã³ã¼ãã«ãããã¨ãã§ãã¾ããã
ã¾ã¨ã
ä»åã¯MUIã使ã£ã¦ã·ã³ãã«ãªã¡ãã¥ã¼ãä½ããããã«ã¡ãã¥ã¼ã®ééãã«ã¹ã¿ã ããã¯ã¨ãã¦åé¢ããã¨ããä¸é£ã®æµããæ¸ãã¦ã¿ã¾ããã
ã«ã¹ã¿ã ããã¯ã¯å
±éæ§ã®ãããã¸ãã¯ãè¤æ°ã®ã³ã³ãã¼ãã³ãããå©ç¨ã§ããããã«ããã ãã§ãªãã
ãã¸ãã¯ãè¤éã«ãªã£ã¦ããéã«ã«ã¹ã¿ã ããã¯ã¨ãã¦åãåºããã¨ã§ãã³ã¼ãã®è¦èªæ§ããããªããã³ã³ãã¼ãã³ããã·ã³ãã«ã«ä¿ã¤ãã¨ãã§ãã¾ãã
ç¶æ
管çããã¸ãã¯ãæ´çãããå ´åã«ãã²æ´»ç¨ãã¦ã¿ã¦ãã ããã