我有以下代码用作教程:
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;
单击按钮后,对话框不会打开,而是页面刷新。我不确定这是怎么回事。
答案 0 :(得分:3)
页面正在刷新,因为按钮的类型为“提交”,从而触发页面刷新。
因此您可以通过两种不同的方式来阻止该问题。
const CommentSend = () => {
// ... redacted for brevity
return (
<form>
<Button
onClick={e => {
setOpen(true);
}}
>
Add Comment
</Button>
<Dialog open={open}>
// ... redacted for brevity
</Dialog>
</form>
);
};
<Button
onClick={e => {
e.preventDefault();
setOpen(true);
}}
type="submit"
>
如果需要保留按钮的type="submit"
,可以使用传递给“ onClick”回调的事件并调用.preventDefault()
来阻止刷新。