【问题标题】:React input states not updating after the form submission提交表单后反应输入状态未更新
【发布时间】:2021-11-02 09:12:23
【问题描述】:

当上传带有反应的表单时,状态并没有像更新一秒钟那样更新然后返回输入的值我不知道为什么会发生这种情况

Gif showing the code behaivour

这些是状态

const [values, setValues] = useState({
    // Single File upload hooks
    singleFile: {},
    selectSingleFile: false,
    singleTitle: '',
    singleArtist: '',
    open: false,

    // Multiple File upload hooks
    multipleFiles: [],
    selectMultipleFiles: false,
    multipleTitle: '',
    multipleArtist: '',

    uploadStatus: Number,
  });

这是句柄提交代码

const handleSubmit = (event) => {
    // converting into the form object
    const formData = new FormData();
    formData.append('title', values.singleTitle);
    formData.append('artist', values.singleArtist);
    formData.append('file', values.singleFile);

    // making request to the server
    let reqOptions = {
      url: '/music/singleFile',
      method: 'POST',
      data: formData,
    };
    axios.request(reqOptions).then(function (response) {
      console.log(response);
      setValues({ ...values, uploadStatus: response.status });
    });

    // Setting the hook back to default values
    setValues({
      ...values,
      singleFile: {},
      selectSingleFile: false,
      singleTitle: '',
      singleArtist: '',
      open: true,
    });
    event.preventDefault();
  };

Form Code

【问题讨论】:

  • 在 api 调用发生之前状态正在清除。您应该在 .then 中清除您的状态,而不是在结尾/
  • 是的,从您的解决方案中了解,谢谢????

标签: javascript reactjs material-ui


【解决方案1】:
const handleSubmit = (event) => {
    // converting into the form object
    const formData = new FormData();
    formData.append('title', values.singleTitle);
    formData.append('artist', values.singleArtist);
    formData.append('file', values.singleFile);

    // making request to the server
    let reqOptions = {
      url: '/music/singleFile',
      method: 'POST',
      data: formData,
    };
    axios.request(reqOptions).then(function (response) {
      console.log(response);
      setValues({ ...values, uploadStatus: response.status });
    }).then(res =>{        
    // Setting the hook back to default values
    setValues({
      ...values,
      singleFile: {},
      selectSingleFile: false,
      singleTitle: '',
      singleArtist: '',
      open: true,
    });
     });

    event.preventDefault();
  };

将您的状态清除在 .then 中,这样您就知道它只有在 api 调用成功后才会清除。

【讨论】:

  • 非常感谢它解决它的解决方案,这是一个非常愚蠢的错误,但我无法弄清楚它有点沮丧所以问了一个问题
猜你喜欢
  • 2017-04-23
  • 1970-01-01
  • 2019-12-18
  • 2021-11-27
  • 2020-12-26
  • 1970-01-01
  • 2019-12-04
  • 1970-01-01
  • 2020-11-11
相关资源
最近更新 更多