簡體   English   中英

提交后 react-hook-form 字段刷新

[英]react-hook-form field refreshes after submit

我將我的 react-hook-form 字段作為孩子發送到另一個 function 組件。 按提交按鈕后,字段刷新並刪除輸入的值。 問題是什么?

CodeSandBox 示例在這里

我的文件App.js

import React from "react";
import "./styles.css";
import { useForm } from "react-hook-form";
import { Box, Button, Grid, TextField } from "@material-ui/core";

export default function App() {
  const { register, handleSubmit } = useForm();

  function onSubmit(data) {
    console.log(data);
  }

  function FieldComponent(props) {
    const { title, children } = props;
    return (
      <Grid container alignItems="center">
        <Grid item xs={3}>
          <Box py={5}>
            <div fontWeight="bold" fontSize="16">
              {title}
            </div>
          </Box>
        </Grid>
        <Grid item xs={9}>
          <Box py={5}>{children}</Box>
        </Grid>
      </Grid>
    );
  }

  return (
    <div className="App">
      <Grid container>
        <Grid item xs={12}>
          <FieldComponent title="name">
            <TextField variant="outlined" name="name" inputRef={register} />
          </FieldComponent>
        </Grid>
        <Grid item xs={12}>
          <Button variant="outlined" onClick={handleSubmit(onSubmit)}>
            Submit
          </Button>
        </Grid>
      </Grid>
    </div>
  );
}

將您的子組件移動到它自己的組件中總是一個好主意,否則,每次重新渲染都會掛載和卸載您的組件。

function FieldComponent(props) {
  const { title, children } = props;
  return (
    <Grid container alignItems="center">
      <Grid item xs={3}>
        <Box py={5}>
          <div fontWeight="bold" fontSize="16">
            {title}
          </div>
        </Box>
      </Grid>
      <Grid item xs={9}>
        <Box py={5}>{children}</Box>
      </Grid>
    </Grid>
  );
}

export default function App() {
  const { register, handleSubmit } = useForm();

  function onSubmit(data) {
    console.log(data);
  }

  return (
    <div className="App">
      <Grid container>
        <Grid item xs={12}>
          <FieldComponent title="name">
            <TextField variant="outlined" name="name" inputRef={register} />
          </FieldComponent>
        </Grid>
        <Grid item xs={12}>
          <Button variant="outlined" onClick={handleSubmit(onSubmit)}>
            Submit
          </Button>
        </Grid>
      </Grid>
    </div>
  );
}

https://codesandbox.io/s/agitated-darkness-leg7z?file=/src/App.js

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM