【问题标题】:Clear checkbox in reactjs hooks after submitting提交后清除reactjs钩子中的复选框
【发布时间】:2020-07-09 22:21:34
【问题描述】:

我在一个表单中有几个单独的复选框。但我不知道如何在提交后清除复选框。

const App = () =>{

   const funct1 = (e) => {
      if(e.target.checked){
      //some function
      }
   }

   const funct2 = (e) => {
      if(e.target.checked){
      //some function
      }
   }

   const funct3 = (e) => {
      if(e.target.checked){
      //some function
      }
   }
   const submitForm= (e) => {
      //some function
   }
   
   return(
      <div>
         <div>
            Pear <Checkbox onChange={(e)=>funct1(e)} />
         </div>
         <div>
            Apple <Checkbox onChange={(e)=>funct2(e)} />
         </div>
         <div>
            Orange <Checkbox onChange={(e)=>funct3(e)} />
         </div>
         <Button onClick={(e) => submitForm(e)}> Submit </Button>
      </div>
   )
}

我已阅读有关useRef 的信息,但我不确定它在这种情况下如何帮助我。谁能向我解释在这种情况下是否可以使用useRef 来帮助我实现我想要的?

【问题讨论】:

    标签: reactjs checkbox


    【解决方案1】:

    不受控制的解决方案

    只需添加一个&lt;input type="reset"&gt; 元素,HTML 就会清除表单中的所有内容

    控制溶液

    将复选框的值保持为反应状态,并在提交处理程序中重置它们:

    const [check1, setCheck1] = useState(false)
    
    <Checkbox value={check1} onChange={e => setCheck1(e.target.checked)} />
    

    【讨论】:

    • 任何关于受控解决方案的例子?现在我用来执行计算的都是基于e.target.checked。我已经更新了我的代码
    • 你正在打败整个 react 架构,你应该始终在 react 的钩子中保持状态或在类组件中使用 setState()。添加了一个小sn-p。
    【解决方案2】:

    控制通过状态检查的值。你开始取消选中即:useState(false)

    import React, { useState } from "react";
    
    
    function Form() {
     //  initialize your checkbox value
     const [pear, setPear] = useState(false);
    
     function handleSubmit(){
      // use the pear variable instead of the event values
      // do your submit logic, i would assume some ajax call to a backend. 
      fetch('/myFormSubmitEndpoint')
       .then(response => response.json())
       .then(data => setPear(false)) //here you will do all your "reset" logic AFTER your submit has succeeded
       .catch(...)
     }
    
     return (
       <form>
         <label>
           Pear
           <input
            checked={pear}
            onChange={e => setPear(!pear)}
            type="checkbox"
            name="pear" />
        </label>
    
        <button type="submit" onClick={handleSubmit}>Submit</button>
      </form>
     );
    } 
    export default Form;
    

    【讨论】:

    • 它不起作用。现在我的setPear 在第一次点击后的值是真的,因此下次它重新渲染时,它仍然是真的
    • @jason1234 啊,我看到你想提交后清除它,我更新了例子
    猜你喜欢
    • 2015-09-12
    • 2020-12-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-16
    • 2018-07-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多