【问题标题】:React Hooks clear inputs after submit提交后 React Hooks 清除输入
【发布时间】:2020-05-12 11:57:12
【问题描述】:

我开始使用 Hooks,并且我有一个带有多个输入的 useState 对象。我想了解的是如何在提交表单后清除输入值。

在 sumbit 函数 I setInput({ Input1: "", Input2: "" }); 上,这实际上会清除对象值,但不会清除输入值。

另外,不知道为什么console.log(input); 会出现多次。

import React, { useState } from "react";
import "./styles.css";

export default function App() {
  const [input, setInput] = useState({ Input1: "", Input2: "" });
  const [button, setButton] = useState("Button");
  console.log(input);

  const _handleChange = e => {
    setInput({ ...input, [e.target.name]: e.target.value });
  };

  function _handleSubmit(e) {
    e.preventDefault();
    setInput({ Input1: "", Input2: "" });
    setButton("Submitted");
    setTimeout(() => setButton("Button"), 1000);
    console.log("Submitted");
  }

  return (
    <form onSubmit={_handleSubmit}>
      <input
        type={"text"}
        placeholder={"Input1"}
        name={"Input1"}
        onChange={_handleChange}
      />
      <input
        type={"text"}
        placeholder={"Input2"}
        name={"Input2"}
        onChange={_handleChange}
      />
      <button text="Save" type="submit">
        {button}
      </button>
    </form>
  );
}

【问题讨论】:

    标签: reactjs react-hooks


    【解决方案1】:

    目前,您的input不受控制的组件,它不知道由_handleChange 处理的状态input.Input1

    尝试向其添加 value 属性。

    controlled vs uncontrolled component.

    <input value={input.Input1} onChange={_handleChange} />
    


    此外,日志在_handleSubmit 上出现两次,因为您更改了两次状态:

    1. 批处理设置状态 - 导致单个渲染和第一个日志。
    setInput({ Input1: '', Input2: '' });
    setButton('Submitted');
    
    1. 您设置了timeout,它会在1000ms 之后更改状态 - 导致单个渲染和第二个日志。
    setTimeout(() => setButton('Button'), 1000);
    

    【讨论】:

    • 非常感谢 - 我正在重构一个类组件以使用钩子,value 之前在那里,被错误地删除了。
    猜你喜欢
    • 1970-01-01
    • 2018-03-14
    • 2022-01-18
    • 1970-01-01
    • 1970-01-01
    • 2020-06-06
    • 2013-10-16
    • 2016-10-23
    相关资源
    最近更新 更多