Loading [MathJax]/jax/input/TeX/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >React技巧之表单提交获取input值

React技巧之表单提交获取input值

作者头像
chuckQu
发布于 2022-08-19 08:15:22
发布于 2022-08-19 08:15:22
1.7K00
代码可运行
举报
文章被收录于专栏:前端F2E前端F2E
运行总次数:0
代码可运行

原文链接:https://bobbyhadz.com/blog/react-get-form-input-value-on-submit[1]

作者:Borislav Hadzhiev[2]

正文从这开始~

总览

在React中,通过表单提交获得input的值:

  1. state变量中存储输入控件的值。
  2. form表单上设置onSubmit属性。
  3. handleSubmit函数中访问输入控件的值。
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import {useState} from 'react';

const App = () => {
  const [firstName, setFirstName] = useState('');
  const [lastName, setLastName] = useState('');

  const handleSubmit = event => {
    console.log('handleSubmit ran');
    event.preventDefault(); // 👈️ prevent page refresh

    // 👇️ access input values here
    console.log('firstName 👉️', firstName);
    console.log('lastName 👉️', lastName);

    // 👇️ clear all input values in the form
    setFirstName('');
    setLastName('');
  };

  return (
    <div>
      <form onSubmit={handleSubmit}>
        <input
          id="first_name"
          name="first_name"
          type="text"
          onChange={event => setFirstName(event.target.value)}
          value={firstName}
        />
        <input
          id="last_name"
          name="last_name"
          type="text"
          value={lastName}
          onChange={event => setLastName(event.target.value)}
        />

        <button type="submit">Submit form</button>
      </form>
    </div>
  );
};

export default App;

get-form-input-value-on-submit.gif

受控控件

我们使用useState钩子来跟踪输入控件的值。我们在控件上设置onChange属性,因此当控件上的值更新时,我们更新相应的state变量。

form表单上的button元素具有submit类型,所以每当按钮被点击时,form表单上的submit事件就会被触发。

form表单被提交时,我们在handleSubmit函数中使用event.preventDefault() ,以此来阻止form表单页面刷新。

为了获得表单提交时的输入值,我们只需访问state变量。如果你想在表单提交后清空控件值,可以设置state变量为空字符串。

不受控控件

类似地,可以使用不受控制的输入控件。

  1. 在每个输入控件上设置ref属性。
  2. form元素上设置onSubmit属性。
  3. ref对象上访问input的值,比如,ref.current.value
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import {useRef} from 'react';

const App = () => {
  const firstRef = useRef(null);
  const lastRef = useRef(null);

  const handleSubmit = event => {
    console.log('handleSubmit ran');
    event.preventDefault(); // 👈️ prevent page refresh

    // 👇️ access input values here
    console.log('first 👉️', firstRef.current.value);
    console.log('last 👉️', lastRef.current.value);

    // 👇️ clear all input values in the form
    event.target.reset();
  };

  return (
    <div>
      <form onSubmit={handleSubmit}>
        <input
          ref={firstRef}
          id="first_name"
          name="first_name"
          type="text"
        />
        <input
          ref={lastRef}
          id="last_name"
          name="last_name"
          type="text"
        />

        <button type="submit">Submit form</button>
      </form>
    </div>
  );
};

export default App;

上述示例使用了不受控制的输入控件。需要注意的是,输入控件没有onChange属性或者值设置。

你可以用defaultValue属性给一个不受控制的input传递一个初始值。然而,这并不是必须的,如果你不想设置初始值,你可以省略这个属性。

当使用不受控制的输入控件时,我们使用ref来访问input元素。useRef()钩子可以被传递一个初始值作为参数。该钩子返回一个可变的ref对象,其.current属性被初始化为传递的参数。

需要注意的是,我们必须访问ref对象的current属性,以获得对我们设置ref属性的input元素的访问。

当我们为元素传递ref属性时,比如说,<input ref={myRef} /> ,React将ref对象的.current属性设置为相应的DOM节点。

useRef钩子创建了一个普通的JavaScript对象,但在每次渲染时都给你相同的ref对象。换句话说,它几乎是一个带有.current属性的记忆化对象值。

需要注意的是,当你改变refcurrent属性的值时,不会导致重新渲染。每当用户提交表单时,不受控制的input的值会被打印。

你不应该在一个不受控制的input(一个没有onChange处理函数的输入控件)上设置value属性,因为这将使输入控件不可变,你将无法在其中键入。

reset

如果你想在表单提交后清除不受控制的input值,你可以使用reset()方法。

reset()方法还原表单元素的默认值。不管你的表单有多少不受控制的输入控件,只要调用reset()方法就可以清除所有的字段。

当表单被提交时,获取输入控件值的另一种方法是,使用name属性访问表单元素。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
const App = () => {
  const handleSubmit = event => {
    console.log('handleSubmit ran');
    event.preventDefault();

    // 👇️ access input values using name prop
    console.log('first 👉️', event.target.first_name.value);
    console.log('second 👉️', event.target.last_name.value);

    // 👇️ clear all input values in the form
    event.target.reset();
  };

  return (
    <div>
      <form onSubmit={handleSubmit}>
        <input
          id="first_name"
          name="first_name"
          type="text"
        />
        <input
          id="last_name"
          name="last_name"
          type="text"
        />

        <button type="submit">Submit form</button>
      </form>
    </div>
  );
};

export default App;

event对象上的target属性引用form元素。

你不会经常看到这种方法,如果你不想在state中存储输入控件的值或使用ref对象,就可以使用这种方法。这主要是一种快速和不整洁的解决方案。

最常用的方法是将input值存储在state变量中。从任何地方访问state变量的能力允许高度可定制的表单。

参考资料

[1]

https://bobbyhadz.com/blog/react-get-form-input-value-on-submit: https://bobbyhadz.com/blog/react-get-form-input-value-on-submit

[2]

Borislav Hadzhiev: https://bobbyhadz.com/about

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-06-29,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 前端F2E 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
React技巧之设置input值
原文链接:https://bobbyhadz.com/blog/react-set-input-value-on-button-click[1]
chuckQu
2022/08/19
2.1K0
React技巧之设置input值
React报错之react component changing uncontrolled input
原文链接:https://bobbyhadz.com/blog/react-component-changing-uncontrolled-input[1]
chuckQu
2022/08/19
3890
React报错之react component changing uncontrolled input
React技巧之重定向表单提交
原文链接:https://bobbyhadz.com/blog/react-redirect-after-form-submit[1]
chuckQu
2022/08/19
1.4K0
React技巧之重定向表单提交
React报错之`value` prop on `input` should not be null
原文链接:https://bobbyhadz.com/blog/react-value-prop-on-input-should-not-be-null[1]
chuckQu
2022/08/19
7310
React报错之`value` prop on `input` should not be null
浅谈表单受控性及结合Hooks应用
form 几乎是 web 开发中最常用的元素之一,而作为前端接口仔和表单的关系可以说紧密而不可分割。在本文中将介绍在 React 中受控和非受控表单是如何使用的,以及现代化使用 hooks 来管理 form 状态。
政采云前端团队
2023/12/21
4580
浅谈表单受控性及结合Hooks应用
React报错之You provided a `checked` prop to a form field
当我们在多选框上设置了checked 属性,却没有onChange 处理函数时,会产生"You provided a checked prop to a form field without an onChange handler"错误。为了解决该错误,可以使用defaultChecked 属性,或者在表单字段上设置onChange 属性。
chuckQu
2022/09/20
1.7K0
React报错之You provided a `checked` prop to a form field
React技巧之检查复选框是否选中
原文链接:https://bobbyhadz.com/blog/react-check-if-checkbox-is-checked[1]
chuckQu
2022/08/19
1.6K0
React技巧之检查复选框是否选中
React受控组件和非受控组件
在HTML中,表单元素的标签<input>、<textarea>、<select>等的值改变通常是根据用户输入进行更新。 在React中,可变状态通常保存在组件的状态属性中,并且只能使用 setState() 进行更新,而呈现表单的React组件也控制着在后续用户输入时该表单中发生的情况,以这种由React控制的输入表单元素而改变其值的方式,称为受控组件。 比如,给表单元素input绑定一个onChange事件,当input状态发生变化时就会触发onChange事件,从而更新组件的state。
愤怒的小鸟
2021/01/11
3.8K0
React---组件实例三大核心属性(三)refs与事件处理
    获取值:const { input1 } = this.refs; console.log(input.value)
半指温柔乐
2021/04/22
1.2K0
React报错之Parameter 'event' implicitly has an 'any' type
当我们不在事件处理函数中为事件声明类型时,会产生"Parameter 'event' implicitly has an 'any' type"错误。为了解决该错误,显示地为event参数声明类型。比如说,在input元素上,将处理change事件声明类型为React.ChangeEvent<HTMLInputElement> 。
chuckQu
2022/09/20
1.1K0
React报错之Parameter 'event' implicitly has an 'any' type
React受控与非受控组件
表单项的元素 input/textarea/select 等 需要维护自己的state,并根据用户输入进行更新。 可变状态通常保存在组件的state中,只能通过setState()进行更新。
epoos
2022/06/06
5400
React Ref 使用总结
useRef 还可以传入一个初始值,这个值会保存在 ref.current 中,上面代码中,如果不给 div 元素传递 ref={divRef},则 divRef.current 的值将是我们传入的初始值。
多云转晴
2020/09/08
7.1K0
React Ref 使用总结
React技巧之打开文件输入框
原文链接:https://bobbyhadz.com/blog/react-open-file-input-on-button-click[1]
chuckQu
2022/08/19
9810
React技巧之打开文件输入框
带你用React从零实现一个Antd4 Form表单
在cms后台管理系统中,大家一定绕不开对Form表单的使用,接下来我们就来详细解析下Antd4 Form的背后实现以及数据仓库的知识。其实Form表单就做了以下几件事情:
前端bubucuo
2022/09/16
1.4K0
带你用React从零实现一个Antd4 Form表单
React 中非受控和受控的组件
两者都是呈现 HTML 表单元素的 React 组件。这意味着,每当您创建具有 HTML 表单的组件时,您都会创建两个组件中的任何一个。但是两者之间的显着差异,接下来我们来我们来详细介绍它们。
用户8921923
2022/10/24
2.4K0
antd4与antd3Form表单设计区别
antd3思想:使用HOC(高阶组件)包裹form表单,HOC组件中的state存储所有的value值,定义设置值和获取值的方法 缺点:动一发牵全身,一个value值改变,因为这是顶级状态,所以所有的子组件都会因父组件的重新render而render,浪费了性能
刘嘿哈
2022/10/25
2K0
React--11: refs与事件处理非受控组件和受控组件
首先,受控组件不能使用ref了。那我们想改变值怎么办呢?给输入框添加onChange事件,只要输入框的值改变就会触发一个函数。
用户4793865
2023/01/12
5600
React 状态、事件与动态渲染
例子中使用map方法将每个元素的值*2,最后得到的数组为:[2, 4, 6, 8, 10]。在React中,处理组件数组的方式与之类似。
随风溜达的向日葵
2018/07/31
1.5K0
01-React基础(JSX, State, Refs, Props组件交互, Event, 生命周期)
引入JS # react 开发JS react.development.js # react dom渲染JS react-dom.development.js # jsx语法转换JS babel.min.js # 参数传值校验JS prop-types.js JSX语法 # 容器 <div id="test"></div> # 注意写JSX语法需要定义为babel <script type="text/babel"> const myName = "flower"; # 创建虚拟DOM, 不需要写
彼岸舞
2022/08/24
1.1K0
01-React基础(JSX, State, Refs, Props组件交互, Event, 生命周期)
受控组件表单&不受控组件
表单里面的数据 根据State确定 在 HTML 中,表单元素如 <input>,<textarea> 和 <select>表单元素通常保持自己的状态,并根据用户输入进行更新。而在 React 中,可变状态一般保存在组件的 state(状态) 属性中,并且只能通过 setState()更新。
河湾欢儿
2018/09/06
2.2K0
相关推荐
React技巧之设置input值
更多 >
领券
💥开发者 MCP广场重磅上线!
精选全网热门MCP server,让你的AI更好用 🚀
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验