【问题标题】:(React.js + Hooks) How to reset input field after button click?(React.js + Hooks)单击按钮后如何重置输入字段?
【发布时间】:2021-04-29 20:37:08
【问题描述】:

我想要做的是有一个用户可以输入的输入。单击按钮后,获取该输入并对其进行处理,并使用连接到输入的数据库执行一些后端操作。我正在尝试使用状态挂钩来完成此操作:onBlur,将输入保存到状态中。单击按钮时,做两件事:1)获取状态变量并将其传递给后端解析器,2)清除输入字段,使其为空,并且仅存在占位符文本。

我有这个代码:

const [inputVal, setInputVal] = useState("");

updateInput = (e) => {
    const val = e.target.value;
    setInputVal(val);
}

sendData = async () => {
    //handle async backend processing with inputVal
    setInputVal("");
    //rerender
}


<Button className="input-button" onClick={sendData}>Send Data</Button>
<input className="input-field" placeHolder="Input name." defaultValue={inputVal} onBlur=(updateInput)></input>

但是,我有两个问题。

  1. 在按钮点击时,我想先更新输入,然后处理按钮点击,所以它总是使用新值。但是,这似乎存在一些问题,可能是由于 sendData 的异步特性?

  2. 虽然 inputVal 可能是一个空字符串,但出于某种原因,输入框中的值不会重置为空,它会保持原样(尽管内部数据仍然有 inputVal = 0)。并且 onBlur 会重新更新 inputVal。

【问题讨论】:

    标签: javascript reactjs react-hooks event-handling


    【解决方案1】:

    对于受控状态输入,最常见的方法是使用onChange 而不是onBlur。这也可以避免您与模糊和点击事件的冲突。你也可以将inputVal 传递给value 输入的属性。

      const [inputVal, setInputVal] = useState("");
    
      const updateInput = (e) => {
        const val = e.target.value;
        setInputVal(val);
      }
    
      const sendData = async () => {
        //handle async backend processing with inputVal
        setInputVal("");
        //rerender
      }
    
      return (
        <>
          <button className="input-button" onClick={sendData}>Send Data</button>
          <input className="input-field" onChange={updateInput} placeHolder="Input name." value={inputVal}/>
        </>
      );
    

    【讨论】:

      【解决方案2】:

      首先,将 defaultValue 更改为 value={inputVal},因为它是受控输入。 其次,请详细说明您在1中遇到的问题。

      【讨论】:

      • 首先,我尝试做 value={inputVal},但是,它似乎不起作用,因为我根本无法编辑输入中的任何内容。至于我关于 1) 的问题,单击按钮发送数据会触发 onBlur 事件和按钮单击事件,后者是异步处理的,我想确保更新输入的 onBlur 事件首先发生,虽然我认为我解决了这个问题。实际上,我通过使用 event.target 的钩子并将其值设置为“”来规避 2) 的问题,但我仍然很好奇为什么使用 value/defaultValue 不起作用。
      • 我不知道您是否尝试更新输入状态 onBlur 但通常,您使用 onChange 处理程序更新受控输入的值,以便每次您键入状态更新的字符。
      猜你喜欢
      • 2020-12-28
      • 1970-01-01
      • 2020-03-02
      • 1970-01-01
      • 2014-06-19
      • 2021-10-20
      • 2021-09-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多