English 中文(简体)
职能通过至Modal 在国家内部不执行
原标题:Function Passed to Modal Not executing as expected, when keeping it inside state

I want to create a custom modal that I can use for multiple actions on the same page, for that I have created a state to store, title, description, and submit function for modal click and modal open state. I also want to take user comments before submitting on the modal, for that I have defined another state text. I passed it inside a modal. when the text inside is changing text state is updated, i also used the same state inside my submit function over there it is not getting reflected. why this is happening?

I want my handleSubmit function to print text added in modal when I click on modal submit.

编码和盒式链接——>

<>中文本>

const defaultModal = {
  open: false,
  title: "",
  description: "",
  handleSubmit: null,
};
const Parent = () => {
  const [modal, setModal] = useState(defaultModal);
  const [text, setText] = useState("");

  const handleSubmit = () => {
    console.log(text + " in submit");
    setModal(defaultModal);
  };

  const handleDelete = () => {
    console.log(text + "in delete");
    setModal(defaultModal);
  };

  const openSubmitModal = () => {
    setModal(prev=>({
      ...prev,
      open: true,
      title: "Are you sure to submit",
      description: "now yo are submitting",
      handleSubmit: handleSubmit,
    }));
  };

  const openDeleteModal = () => {
    setModal(prev=>({
      ...prev,
      open: true,
      title: "Are you sure to submit",
      description: "now yo are submitting",
      handleSubmit: handleDelete,
    }));
  };

  return (
    <Box
      sx={{
        display: "flex",
        flexDirection: "column",
        p: 4,
      }}
    >
      <Box>
        Lorem ipsum dolor sit amet consectetur adipisicing elit. Quo, aliquid?
      </Box>
      <Box>
       {text}
      </Box>
      <Modal
        title={modal?.title}
        description={modal?.description}
        open={modal?.open}
        handleSubmit={modal?.handleSubmit}
        text={text}
        onTextChange={(e) => setText(e.target.value)}
        handleClose={()=>setModal(defaultModal)}
      />
      <Box>
        <ButtonGroup
          variant="contained"
          aria-label="outlined primary button group"
        >
          <Button onClick={openSubmitModal}>submit</Button>
          <Button onClick={openDeleteModal}>delete</Button>
        </ButtonGroup>
      </Box>
    </Box>
  );
};

export default Parent;

Modal Component

export default function Modal({open,title,description,handleSubmit,handleClose,text,onTextChange}) {

  return (
      <Dialog
        open={open}
        onClose={handleClose}
        PaperProps={{
          component:  form ,
          onSubmit: (event) => {
            event.preventDefault();
            handleSubmit();
          },
        }}
      >
        <DialogTitle>{title}</DialogTitle>
        <DialogContent>
          <DialogContentText>
            {description}
          </DialogContentText>
          <TextField
            autoFocus
            required
            margin="dense"
            label="Comments"
            type="text"
            value={text}
            onChange={onTextChange}
            fullWidth
            variant="standard"
          />
        </DialogContent>
        <DialogActions>
          <Button onClick={handleClose}>Cancel</Button>
          <Button type="submit">Submit</Button>
        </DialogActions>
      </Dialog>
  );
}
问题回答

Your "text" value is saved in the closure and this value is used in the future. Change the code as follows:

Parent.jsx

const handleSubmit = (value) => {
  console.log(value + " in submit");
  setModal(defaultModal);
};

Modal.jsx

onSubmit: (event) => {
  event.preventDefault();
  handleSubmit(text);
},  




相关问题
selected text in iframe

How to get a selected text inside a iframe. I my page i m having a iframe which is editable true. So how can i get the selected text in that iframe.

How to fire event handlers on the link using javascript

I would like to click a link in my page using javascript. I would like to Fire event handlers on the link without navigating. How can this be done? This has to work both in firefox and Internet ...

How to Add script codes before the </body> tag ASP.NET

Heres the problem, In Masterpage, the google analytics code were pasted before the end of body tag. In ASPX page, I need to generate a script (google addItem tracker) using codebehind ClientScript ...

Clipboard access using Javascript - sans Flash?

Is there a reliable way to access the client machine s clipboard using Javascript? I continue to run into permissions issues when attempting to do this. How does Google Docs do this? Do they use ...

javascript debugging question

I have a large javascript which I didn t write but I need to use it and I m slowely going trough it trying to figure out what does it do and how, I m using alert to print out what it does but now I ...

Parsing date like twitter

I ve made a little forum and I want parse the date on newest posts like twitter, you know "posted 40 minutes ago ","posted 1 hour ago"... What s the best way ? Thanx.

热门标签