无法在反应挂钩中单击按钮时绑定单选按钮和复选框数据

2024-02-16

我有一个表单,当我提交数据时,它将发送到服务器并在表格中显示数据。 在表中我有编辑按钮,当单击编辑按钮时,数据应该绑定到表单。 在这里,我无法绑定输入字段,但不能绑定单选按钮和复选框......

const Form = () => {
    const [data, setdata] = useState({
        "UserName" : "",
          "dropDown" :"",
          "gender" : "",
          "checking" :""
    })

    const [update, setUpdate] = useState([])

    const handleChange =(e)=>{
     
        if(e.target.name !=="gender" && e.target.name !=="checking"){
            setdata({...data,[e.target.name]:e.target.value});
        }else if(e.target.name ==="gender"){
                let allgenders = document.getElementsByName("gender");
                allgenders.forEach((allradio)=>{
                          if(allradio.checked){
                            setdata({...data,[e.target.name]:e.target.value});    
                          }
                })
        }else if(e.target.name ==="checking"){
                  let getallCheckboxes =[];
                  let allCheckboxes =document.getElementsByName("checking");
                  allCheckboxes.forEach((allchecks)=>{
                                if(allchecks.checked){
                                    getallCheckboxes.push(allchecks.value)
                                }
                  });
                  setdata({...data,[e.target.name]:getallCheckboxes});     
                  
        }

    }
    useEffect(() => {
        getAllData();
}, [])

   const handleSubmit=(e)=>{
    e.preventDefault();
    // setUpdate({...data,update});
    // console.log(data);
      axios.post('http://localhost:3000/users',data).then((res)=>{
        //   console.log("user added successfully");
        getAllData();
        handleClear();      
      })

   }

  const getAllData=()=>{
    axios.get('http://localhost:3000/users').then((res)=>{
        setUpdate(res.data);
       })
  }

const deleteUser=(dating)=>{
    console.log(dating);
    axios.delete('http://localhost:3000/users/'+dating.id).then(res=>{
        getAllData();
    })
}

这是编辑和更新的功能,在这里我可以绑定输入字段,但不能绑定单选按钮和复选框...

 const editUser=(userData)=>{
        setdata(userData)
    }
    
     const handleEdit=()=>{
         console.log(data);
             axios.put('http://localhost:3000/users/'+data.id,data).then(res=>{
            getAllData();
        })
     }
    
        return (
            <React.Fragment>
                <h1>LordShiva</h1>
                <div className="container mt-3">
                    <div className="row">
                        <div className="col-md-6">
                            <div className="card">
                                <div className="card-header bg-success text-white">
                                    <h4>Form</h4>
                                    <form>
                                        <div className="form-group">
                                            <input type="text" className="form-control" placeholder='UserName' name="UserName" value={data.UserName} onChange={handleChange} />
                                        </div>
                                        <div className="form-group">
                                            <input name="phone" className="form-control" placeholder='PhoneNumber' name="PhoneNumber" value={data.PhoneNumber} onChange={handleChange} />
                                        </div>
    
                                        <div className="form-group">
                                            <input name="email" className="form-control" placeholder='Email' value={data.email} onChange={handleChange} />
                                        </div>
                                        <div className="form-group">
                                            <select name="dropDown" value={data.dropDown} onChange={handleChange} className="form-control" >
                                                <option value=""></option>
                                                <option value="Reactjs">ReactJS</option>
                                                <option value="JS">JavaScript</option>
                                                <option value="csCSSs">CSS</option>
                                                <option value="HTML">HTML</option>
                                            </select>
                                        </div>
                                        <div class="form-row">
                                            <div className="form-group col-md-6">
                                                <label className="font-weight-bold">Gender : </label>
                                                <span className="font-weight-bold" > Male <input type="radio" name="gender" value={data.gender} onChange={handleChange}/></span>
                                                <span className="font-weight-bold" >  Female <input type="radio" name="gender" value={data.gender}  onChange={handleChange} /></span>
                                            </div>
                                            <div class="form-check col-md-6">
                                                
                                                        <label class="form-check-label" for="gridCheck">Course</label><br />
                                                <input type="checkbox" value="HTML" name="checking" value={data.checking} onChange={handleChange} /> HTML <br />
                                                <input type="checkbox" value="JavaScript" name="checking" value={data.checking} onChange={handleChange} /> JavaScript <br />
                                                <input type="checkbox" value="ReactJS" name="checking" value={data.checking} onChange={handleChange} /> ReactJS <br />
                                                <input type="checkbox" value="CSS" name="checking" value={data.checking} onChange={handleChange} /> CSS <br />
                                                    
                                            </div>
                                            <div className="form-row">
                                            <button className="btn btn-cyan" type="button" onClick={handleSubmit}>Submit</button>
                                            <button className="btn btn-cyan" type="button" onClick={handleEdit}>UpdateData</button>
                                            </div>
                                        </div>
                                    </form>
                                </div>
                            </div>
                        </div>
                        <div className="col-md-12">
                            <div className="card mt-5">
                                <div className="card-header blue-gradient text-white">
                                    <h4>FormDetails</h4>
                                    <div>
                                       <div className="row mt-3">
                                           <div className="col">
                                               <div className="table table-hover table-striped text-center table-primary">
                                                    <thead className="bg-dark text-white font-weight-bold">
                                                        <tr>
                                                            <th>UserName</th>
                                                            <th>DropDownValue</th>
                                                            <th>Gender</th>
                                                            <th>CheckboxValue</th>
                                                            <th>EDIT</th>
                                                            <th>DELETE</th>
                                                        </tr>
                                                    </thead>
                                                    <tbody>
                                                          {
                                                              update.map(emp => {
                                                                  return(
                                                                      <tr>
                                                                        <td>{emp.UserName} </td>
                                                                        <td>{emp.gender}</td>
                                                                        <td>{emp.checking}</td>
                                                                  <td><button className="btn btn-cyan font-weight-bold" onClick={()=>{editUser(emp)}}>Edit</button></td>  
                                                                        <td><button className="btn btn-green font-weight-bold" onClick={()=>{deleteUser(emp)}}>Delete</button></td>  
                                                                      </tr>
                                                                  )
                                                              })
                                                          }
                                                    </tbody>
                                               </div>
                                           </div>
                                       </div>
                                      
                                    </div>
                                </div>
                            </div>
                        </div>
                    </div>
                </div>
            </React.Fragment >
        )
    }

将状态更改为

const [data, setdata] = useState({
  UserName: "",
  dropDown: "",
  gender: null,
  checking: []
});

更新处理程序以访问无线电和复选框id属性

const handleChange = (e) => {
  if (e.target.name !== "gender" && e.target.name !== "checking") {
    setdata({ ...data, [e.target.name]: e.target.value });
  } else if (e.target.name === "gender") {
    let allgenders = document.getElementsByName("gender");
    allgenders.forEach((allradio) => {
      if (allradio.checked) {
        setdata({ ...data, [e.target.name]: e.target.id }); // <-- grab input id
      }
    });
  } else if (e.target.name === "checking") {
    let getallCheckboxes = [];
    let allCheckboxes = document.getElementsByName("checking");
    allCheckboxes.forEach((allchecks) => {
      if (allchecks.checked) {
        getallCheckboxes.push(allchecks.id); // <-- grab checkbox id
      }
    });
    setdata({ ...data, [e.target.name]: getallCheckboxes });
  }
};

更新/添加handleClear重置状态

handleClear = () => {
  setdata({
    UserName: "",
    dropDown: "",
    gender: null,
    checking: []
  });
};

Add id属性并更改value支持checked并传递一个布尔值

<label className="font-weight-bold">Gender : </label>
<span className="font-weight-bold">
  <label>
    Male
    <input
      id="male"
      type="radio"
      name="gender"
      checked={data.gender === "male"}
      onChange={handleChange}
    />
  </label>
</span>
<span className="font-weight-bold">
  <label>
    Female
    <input
      id="female"
      type="radio"
      name="gender"
      checked={data.gender === "female"}
      onChange={handleChange}
    />
  </label>
</span>

...

<label class="form-check-label" for="gridCheck">
  Course
</label>
<br />
<label>
  <input
    id="HTML"
    type="checkbox"
    name="checking"
    checked={data.checking.includes("HTML")}
    onChange={handleChange}
  />
  HTML
</label>
<br />
<label>
  <input
    id="JavaScript"
    type="checkbox"
    name="checking"
    checked={data.checking.includes("JavaScript")}
    onChange={handleChange}
  />
  JavaScript
</label>
<br />
<label>
  <input
    id="ReactJS"
    type="checkbox"
    name="checking"
    checked={data.checking.includes("ReactJS")}
    onChange={handleChange}
  />
  ReactJS
</label>
<br />
<label>
  <input
    id="CSS"
    type="checkbox"
    name="checking"
    checked={data.checking.includes("CSS")}
    onChange={handleChange}
  />
  CSS
</label>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

无法在反应挂钩中单击按钮时绑定单选按钮和复选框数据 的相关文章

随机推荐

  • 错误:日期/时间字段值超出范围:“30/12/2014 23:58:04”postgresql

    我正在尝试将 csv 文件导入 postgresql 数据库 我已经尝试过了set datestyle mdy copy Recon snapdeal sales REFERENCES ORDER CODE SUB ORDER CODE P
  • 如何在 pageInfo 中将总计数传递给客户端

    I use first after and last before进行分页 hasNextPage and hasPreviousPage非常有用 但我还需要的是total count这样我就可以计算并显示诸如page 5 of 343 p
  • 防止 ASP.Net 中的 SQL 注入

    我有这个代码 UPDATE OPENQUERY db SELECT FROM table WHERE ref Ref AND bookno Session number 我该如何防止 SQL 注入呢 UPDATE 这就是我正在尝试的 Sql
  • 错误:req.flash() 需要会话

    我是节点新手 我很确定我已经设置了中间件并表示使用闪存消息传递 但是我仍然收到错误 Error req flash requires sessions Setup express js var flash require connect f
  • 在子窗口上绑定 jQuery 事件

    我有一个包含以下 JavaScript 的页面 var w window open somePage html width 500 height 500 w bind someEvent function alert I see the e
  • MinGW:使用 __declspec(dllexport) 还是 __attribute__((visibility("default")))?

    MinGW支持吗 declspec dllexport declspec dllimport 即使是这样 我应该使用 attribute visibility default 基本上我应该根据平台或编译器来决定使用什么 应该是这样吗 ifd
  • 未找到证书链

    我正在签署 jar 文件 由 VeriSign 提供的证书 它提供2个证书 aplha primary cer and aplha secoandary cer 我使用以下命令生成密钥库文件 keytool importcert v ali
  • 在我的应用程序中禁用多指触摸[重复]

    这个问题在这里已经有答案了 我的应用程序使用一个 Activity 来托管多个片段 每次在手机屏幕上显示一个片段 每个片段的视图由多个图像图标组成 目前 用户可以按两个图标同时地用两根手指 每根手指按一个图标 我想禁用此多点触控功能在我的应
  • 如何将一个组件服务响应传递给角度2中的其他组件

    我是角度 4 的新手 在一个组件中从服务器获取响应 并且我希望在其他组件中获取此响应对象如何访问 应用程序组件 ts export class AppComponent selected skipCount number 0 errorMe
  • 如何在3.0模拟器上正确运行应用程序?

    我从 SDK 3 1 和 OpenGL ES 模板创建了一个新项目 如您所知 这个新模板具有 ES 1 1 和 ES 2 0 实现 我想先处理 ES 1 1 部分 所以我将项目设置中的 Base SDK 更改为 Simulator 3 0
  • 创建一个在 R 中重复自身的向量

    我想创建一个重复自身的向量 例如 1 3 直至 12 行 1 2 3 1 2 3 1 2 3 1 2 3 我怎样才能在 R 中做到这一点 感谢您的帮助 See rep 你想要的很简单 gt rep 1 3 times 4 1 1 2 3 1
  • 多对多索引创建约定

    我的问题与这个帖子 https stackoverflow com questions 48645872 prevent index created by convention on many to many table 但我不想阻止 而是
  • HTML5 Canvas 改变所有线条的颜色[重复]

    这个问题在这里已经有答案了 我用 HTML5 画布制作了一个简单的绘图应用程序 您单击两个不同的位置以从一个点到另一个点绘制一条线 我还有两个文本输入框 您可以在其中更改线条粗细和颜色 问题是 当我改变线条的颜色时 它会改变all之前画的线
  • 为 SQL Server 表自动生成 INSERT 语句的最佳方法是什么?

    我们正在编写一个新的应用程序 在测试时 我们将需要一堆虚拟数据 我通过使用 MS Access 将 excel 文件转储到相关表中来添加该数据 我们经常需要 刷新 相关表 这意味着将它们全部删除 重新创建它们 然后运行保存的 MS Acce
  • 可以在 Scala 中隐藏方法吗?

    昨晚 在某个不愉快的时刻 我们庆祝了第五次因以下行为而追踪到错误的实例 String split 例如在 output split n map processRow 问题是如果output是空的 split会给你一行空字符串 process
  • 带有 base64 字符串的 HTML 图像标签(数据 URI)

    我大约每 50 200 毫秒从一系列 httprequests 获取 jpeg 图像的二进制数据 我将此数据转换为 base64 字符串 并使用 javascript 将字符串插入到 img 标记中 var img document get
  • HTML5可以访问手机上的NFC芯片吗

    我对 HTML5 不太熟悉 所以有人知道 HTML5 是否能够访问移动设备内置的 NFC 芯片吗 或者 有人可以建议另一种方法来使用其他方法来做到这一点吗 我的目标是制作一个跨平台 HTML5 Web 应用程序 可以在配备 NFC 的手机上
  • Julia JIT 编译、@time 和分配数量

    我刚刚开始评估 Julia 版本 0 6 0 并且测试了如何调整大小 和尺寸提示 可能会影响性能 我使用 time宏 文档说 运行一次进行 JIT 编译 但如果我们检查分配数量 运行一次似乎还不够 module Test function
  • 子集约束在 UML 类图中意味着什么

    有subset在部门类和人员类之间 但我不知道比是什么意思 家庭作业机会 查看由子集约束链接的两个关系 每个部门有多名成员 每个部门设经理一名 子集表示这两者之间的约束 如果后一个关系的元素是第一个关系的子集 那么你会如何描述其含义 EDI
  • 无法在反应挂钩中单击按钮时绑定单选按钮和复选框数据

    我有一个表单 当我提交数据时 它将发送到服务器并在表格中显示数据 在表中我有编辑按钮 当单击编辑按钮时 数据应该绑定到表单 在这里 我无法绑定输入字段 但不能绑定单选按钮和复选框 const Form gt const data setda