首页 > 其他分享 >React表单合理取值方式

React表单合理取值方式

时间:2023-09-26 10:15:34浏览次数:43  
标签:const form FormData 表单 React 组件 password 取值

React表单完全使用受控组件,即使用value和onChange来控制input状态

<input value={email} onChange={(e) => setEmail(e.target.value)} />

在input输入字符时候,会频繁触发表单重新渲染,因为state改变,react进行了re-render

要避免此种情况,可以使用非受控组件的表单,在组件之间没有实时联动的情况下,非常好用

 <form onSubmit={handleSubmit}>
    <div className="input-field">
        <label htmlFor="email1">Email</label>
        <input id="email1" type="email" name="email" autoComplete="off" />
    </div>
    <div className="input-field">
        <label htmlFor="password1">Password</label>
        <input id="password1" type="password" name="password" />
    </div>
    <button type="submit">Submit</button>
 </form>
function handleSubmit(e) {
    e.preventDefault();

    // e.currentTarget 直接初始化表单
    const form = new FormData(e.currentTarget)

    // form.get 直接获取表单值
    const email = form.get("email");
    const password = form.get("password");
    const gender = form.get("gender");

    //form.set修改对应值
    form.set(password, hash(password)),

    //form.has判断是否有值
    if(formData.has('password')){
        // form.append 添加额外值
        form.append('key', key);
    }

    //form.delete删除指定值
    form.delete('gender', gender),

    // entries遍历表单值
    const body = {};
    for (const [key, value] of form.entries()) {
        body[key] = value;
    }
}

使用FormData的优势

表单输入值会自动捕获,无需为每个输入字段维护状态变量。
使用 FormData 时,API请求体可以很容易地构建,而使用 useState 时,我们需要组装提交的数据。
当表单增长时,它消除了引入新的状态变量的需求。
处理多个表单时,您可能会发现在组件之间重复使用类似的状态变量,而 FormData 只需几行代码就可以轻松重用。
FormData 支持的一项功能是它会自动处理动态字段。即,如果您的表单具有动态生成的字段(根据用户输入添加/删除字段),使用 useState 管理它们的状态需要额外处理,而 FormData 会自动处理这些。


组件需要实时联动,则需要setState刷新视图,需要使用受控组件

待实践后,继续补充

 

参考:在 React 表单开发时,有时没有必要使用State 数据状态  

标签:const,form,FormData,表单,React,组件,password,取值
From: https://www.cnblogs.com/mengff/p/17729475.html

相关文章

  • 一文介绍清楚自定义表单开源的相关功能
    用什么样的软件平台可以让办公无压力,实现流程化发展?随着社会的进步发展,传统的办公工具已经不能满足办公需求了,需要借助低代码技术平台的优势特点,实现流程化办公。一款自定义表单开源工具,可以能让很多客户朋友完成高效率办公协作,顺利朝着数字化发展的方向迈进。什么样的服务商拥有......
  • React & TS 里面两个实用小技巧
    ❝在工作中我们会经常使用技巧和黑魔法,本篇主要讲两个,希望能帮助到大家!文章内容看情况而定,不一定是React里面专属的!❞TS动态取数据这里其实也不知道起什么标题,具体还是看内容吧。平常做法(JS)在JS中,我经常使用对象去定义数据,然后去获取它,像下面这样//订单状态//只是举个栗子不......
  • React:我们的用法习惯可能是错误的(不优雅)
    React:我们的用法习惯可能是错误的(不优雅)今天学到了2023-01-088,361阅读4分钟 在我们React的日常开发中一些常用的写法,看似运行的很好,实际可能并不优雅。学习React并不是如何如何使用它,而是如何写出优雅,干净的代码。下面举一些例子,总结了一些React开发中不好的写法及相......
  • immerjs:React开发必会技能
    immerjs:React开发必会技能龙骑士尹道长 ​关注 2人赞同了该文章我们都知道React追求的泛式是数据不可变,一般情况下state或者props改变才进入render阶段;如果我们创建的state是一个一般数据类型,他就是一个不可变的值,如果需要改变我们需要重新创建一个state......
  • 一文带你实现云上部署轻量化定制表单Docker
    本文分享自华为云社区 《【华为云云耀云服务器L实例评测|云原生】自定制轻量化表单Docker快速部署云耀云服务器|玩转华为云》,作者:计算机魔术师。华为云的云耀云服务器L实例备受推崇,以其高效、可靠和安全的基础设施服务而闻名。本文将为展示在该服务器上部署轻量化定制表单服务,......
  • 自定义表单设计之一
    0、背景10年前入职一家单位时,还没有上商用OA。按领导要求做一个自定义表单模块和现有工作流对接。当我做完自定义表单后,集团又统一上OA系统,此模块就再也没有使用,但是开发的过程还是比较锻炼人的,当时参考了泛微的EC6。1、界面展示1.1显示效果1.2表单设计界面-HTML模式1.3自定义表......
  • React Hooks中父组件中调用子组件方法
    import {useState,useImperativeHandle,forwardRef}from 'react';//props子组件中需要接受reflet ChildComp=(props,ref)=>{    //此处注意useImperativeHandle方法的的第一个参数是目标元素的ref引用    useImperativeHandle(ref,()=>({      ......
  • 宏观上理解blazor中的表单验证
    概述表单验证的最终效果大家都懂,这里不阐述了,主要从宏观角度说说blazor中表单验证框架涉及到的类,以及它们是如何协作的,看完这个,再看官方文档也许能更轻松点。blazor中的验证框架分为两部分:基础验证框架和基于数据注释Atrrbute的验证器,当然也提供了很多扩展点。注意我们通常使......
  • 竟然可以在一个项目中混用 Vue 和 React?
    React和Vue是前端开发中的两大热门框架,各自都有着强大的功能和丰富的生态系统。然而,你有没有想过,在一个项目中同时使用React和Vue?是的,你没有听错,可以在同一个项目中混用这两个框架!本文就来分享3个用于混合使用React和Vue的工具!#VeauryVeaury是一个基于React和Vue3的工......
  • 使用原生js提交form表单
    主要函数functionform(formId,callback){try{consttarget=document.getElementById(formId);target.addEventListener("submit",(e)=>{e.preventDefault();constformData=newFormDa......