对话框未单击onClick事件

时间:2019-06-21 00:29:50

标签: reactjs material-ui

我有以下代码用作教程:

CommentSend.js

import React, { useState } from "react";
import Dialog from "@material-ui/core/Dialog";
import FormControl from "@material-ui/core/FormControl";
import Button from "@material-ui/core/Button";
import Input from "@material-ui/core/Input";
import InputLabel from "@material-ui/core/InputLabel";

const CommentSend = () => {
  const [description, setDescription] = useState("");
  const [open, setOpen] = useState(false)

  return (                                 
              <form>                                    
                  <Button            
                    onClick={() => setOpen(true)}        
                    type="submit"    
                  >
                      Add Comment
                  </Button>
                  <Dialog
                    open={open}
                  >
                    <FormControl fullWidth>
                      <InputLabel htmlFor="comment">Comment</InputLabel>
                      <Input
                        id="comment"
                        onChange={event => setDescription(event.target.value)}
                      />                      
                    </FormControl>
                  </Dialog>
              </form>
          );}

export default CommentSend;

单击按钮后,对话框不会打开,而是页面刷新。我不确定这是怎么回事。

1 个答案:

答案 0 :(得分:3)

页面正在刷新,因为按钮的类型为“提交”,从而触发页面刷新。

您可以分叉Sandbox。 Edit so.answer.56695455

因此您可以通过两种不同的方式来阻止该问题。

1删除“类型=提交”

const CommentSend = () => {
  // ... redacted for brevity    
  return (
    <form>
      <Button
        onClick={e => {
          setOpen(true);
        }}
      >
        Add Comment
      </Button>
      <Dialog open={open}>
         // ... redacted for brevity
      </Dialog>
    </form>
  );
};

查看下面的工作演示。 demo

2防止默认的按钮单击事件。

 <Button
    onClick={e => {
      e.preventDefault();
      setOpen(true);
    }}
    type="submit"
  >

如果需要保留按钮的type="submit",可以使用传递给“ onClick”回调的事件并调用.preventDefault()来阻止刷新。

enter image description here

相关问题