亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

從 Header 父組件打開 Material-UI 對話框模式

從 Header 父組件打開 Material-UI 對話框模式

梵蒂岡之花 2023-05-18 10:09:17
我有一個標題組件與注冊對話框模式組件分開。所以就像父子組件一樣。我想從 headerlink 組件(父)調用注冊對話框(子)這是我的標題鏈接組件:...import Register from "../Register";....export default function HeaderLinks(props) {  const classes = useStyles();  const [open, setOpen] = React.useState(false);  const handleClickOpen = () => {    setOpen(true);  };  const handleClose = () => {    setOpen(false);  };  return (    <List className={classes.list}>      <ListItem className={classes.listItem}>        <Button          color="transparent"          className={classes.navLink}          onClick={handleClickOpen}        >          Register        </Button>      </ListItem>      <ListItem className={classes.listItem}>        <Button          color="transparent"          className={classes.navLink}                  >          Log In        </Button>      </ListItem>    </List>  );  <Register open={handleClickOpen} onClose={handleClose} />;}注冊對話框組件只是從 Material-UI 的文檔中復制并刪除了按鈕。export default function Register() {  const [open, setOpen] = React.useState(false);  const classes = useStyles();  const theme = useTheme();  const handleClickOpen = () => {    setOpen(true);  };  const handleClose = () => {    setOpen(false);  };  return (    <div>      <Dialog        onClose={handleClose}        aria-labelledby="customized-dialog-title"        open={open}      >        <DialogTitle id="customized-dialog-title" onClose={handleClose}>          Register        </DialogTitle>        <DialogContent dividers>         ...content...        </DialogContent>      </Dialog>    </div>  );}當我單擊 headerLink 上的注冊按鈕時,沒有任何反應。不確定我還缺少什么,因為沒有錯誤。
查看完整描述

1 回答

?
慕容森

TA貢獻1853條經驗 獲得超18個贊

在您的 上HeaderLinks,您已經在函數上返回了一個值,因此下面的其余源代碼將不會執行。


return (

  <List className={classes.list}>

    ...

  </List>

);

<Register open={handleClickOpen} onClose={handleClose} />; // <-- code will not be reached

所以只需將它移到 return 語句中并在單個標簽上關閉它們,因為相鄰的 JSX 元素必須包含在封閉標簽中。將道具傳遞給它Register,它不需要內部狀態,因為它的道具(根據您的設計看來)是由組件open控制的HeaderLinks


export default function HeaderLinks() {

  const classes = useStyles();

  const [open, setOpen] = React.useState(false);    

  const handleClickOpen = () => {

    setOpen(true);

  };

  const handleClose = () => {

    setOpen(false);

  };


  return (

    <>

      <List className={classes.list}>

        <ListItem className={classes.listItem}>

          <Button

            color="transparent"

            className={classes.navLink}

            onClick={handleClickOpen}

          >

            Register

          </Button>

        </ListItem>

        <ListItem className={classes.listItem}>

          <Button color="transparent" className={classes.navLink}>

            Log In

          </Button>

        </ListItem>

      </List>

      <Register open={open} handleClose={handleClose} />

    </>

  );

}


function Register({ open, handleClose }) {

  const classes = useStyles();

  const theme = useTheme();


  return (

    <div>

      <Dialog

        onClose={handleClose}

        aria-labelledby="customized-dialog-title"

        open={open}

      >

        <DialogTitle id="customized-dialog-title" onClose={handleClose}>

          Register

        </DialogTitle>

        <DialogContent dividers>...content...</DialogContent>

      </Dialog>

    </div>

  );

}


查看完整回答
反對 回復 2023-05-18
  • 1 回答
  • 0 關注
  • 140 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號