Reactjs入门官方文档(八)【forms】

react-flow-chart:用于react的灵活,无状态,声明性流程图库 React流程图 Dragabble节点和画布 在端口之间创建弯曲的链接 画布,链接,端口,节点的自定义组件 React状态容器 更新选择/悬停节点,端口和链接上的状态 基本功能完成 稳定的NPM版本 滚动/捏画布进行缩放 Ctrl + z / Ctrl + y历史记录 唯读模式 Redux状态容器 链接上的箭头 文件 该项目旨在建立一个高度可定制的声明性流程图库。 至关重要的是,您可以控制状态。 从Redux,MobX,React或任何其他状态管理库中进行选择-只需传递当前状态并连接回调即可。 例如: 数据结构 该流程图被设计为节点,端口和链接的集合。 您可以指定 立即下载

表单

译自reactjs官方文档
HTML 表单元素与 React 中的其他 DOM 元素有所不同,因为表单元素自然地保留了一些内部状态。例如,这个纯 HTML 表单接受一个单独的 name:

<form>
  <label>
    Name:
    <input type="text" name="name"/>
  </label>
  <input type="submit" value="Submit"/>
</form>

该表单和 HTML 表单的默认行为一致,当用户提交此表单时浏览器会打开一个新页面。如果你希望 React 中保持这个行为,也可以工作。但是多数情况下,用一个处理表单提交并访问用户输入到表单中的数据的 JavaScript 函数也很方便。实现这一点的标准方法是使用一种称为“受控组件(controlled components)”的技术。

受控组件(Controlled Components)s

在HTML 中,像<input>、<textarea> 和<select> 这些form elements 通常保留它们自己的状态并根据用户输入来更新。在React 中,可变状态(mutable state)通常保存在组件的状态属性中(state property of components),并且只能由setState() 更新。

我们可以结合两方面来使React state 成为 “单一数据源原则”(single source of truth)。然后React 组件渲染form 同时也能控制后续的用户的输入。一个input 表单元素的值通过React 这种方式控制称为“受控组件”(controlled component)。

例如,如果我们想要在之前例子提交之前输出name,我们可以这样写一个form 作为controlled component:

class NameForm extends Component {
  constructor(props){
    super(props)
    this.state = {
      value : ''
    }

    this.handleChange = this.handleChange.bind(this)
    this.handleSubmit = this.handleSubmit.bind(this)
  }

  handleChange(event){
    this.setState({
      value: event.target.value
    })
  }

  handleSubmit(event){
    alert('A name was submitted: ' + this.state.value)
    event.preventDefault()
  }

  render(){
    return (
      <form onSubmit={this.handleSubmit}>
        <label>
          Name:
          <input type="text" name="name" value={this.state.value} onChange={this.handleChange}/>
        </label>
        <input type="submit" value="Submit"/>
      </form>
    )
  }
}

在CodePen 上尝试

由于value 特性(attribute)设置在form element,将总是展示this.state.value 这个值,使React state 成为同一数据理念(the source of truth)。由于handleChange 总是随着每一次按键而运行去更新React state,展示的值也总是随着用户的键入而更新。

对于controlled component,每一次状态改变(state mutation)总是有相应的句柄处理函数(handler function)。这能更直接的修改和验证用户的输入。例如,如果我们想强制将每一个输入都变成大写,我们可以如下修改handleChange:

  handleChange(event){
    this.setState({
      value: event.target.value.toUpperCase()
    })
  }

textare 标签

在 HTML 中,<textarea> 元素通过它的子节点定义了它的文本值:

<textarea>
  Hello there, this is some text in a text area
</textarea>

在React 中,<textarea> 通过使用value 特性(attribute)来替代。这种方式使用<textarea> 在写法上非常类似form 使用单行输入(single-line input):

class EssayForm extends Component {
  constructor(props){
    super(props)
    this.state = {
      value : 'Please write an essay about your favourite DOM element'
    }
    this.handleChange = this.handleChange.bind(this)
    this.handleSubmit = this.handleSubmit.bind(this)
  }

  handleChange(event){
    this.setState({
      value: event.target.value
    })
  }

  handleSubmit(event){
    alert('An essay was submitted: ' + this.state.value)
    event.preventDefault()
  }

  render(){
    return (
      <form onSubmit={this.handleSubmit}>
        <label>
          Name:
          <textarea value={this.state.value} onChange={this.handleChange} />
        </label>
        <input type="submit" value="Submit"/>
      </form>
    )
  }
}

注意this.state.value 是在构造函数(constructor)中被初始化,所以这个文本域(text area)是以这里的文本为默认值的。

select 标签

在 HTML 中,<select> 创建了一个下拉列表。例如,这段 HTML 创建一个下拉的口味(flavors)列表:

<select>
  <option value="grapefruit">Grapefruit</option>
  <option value="lime">Lime</option>
  <option value="coconut" selected>Coconut</option>
  <option value="mango">Mango</option>
</select>

注意到由于selected 特性(attibute),Coconut 选项是初始化被选中的。在React 中通过在根select 标签上使用value特性(attribute)来替代使用selected 特性(attibute)。这对于controlled component 来说更方便,因为你只需要更新这一个位置就可以了。例如:

class FlavorForm extends Component {
  constructor(props){
    super(props)
    this.state = {
      value: 'coconut'
    }

    this.handleChange = this.handleChange.bind(this)
    this.handleSubmit = this.handleSubmit.bind(this)
  }

  handleChange(event){
    this.setState({
      value: event.target.value
    })
  }

  handleSubmit(event){
    alert('Your favourite flavor is: ' + this.state.value)
    event.preventDefault();
  }

  render(){
    return (
      <form onSubmit={this.handleSubmit} >
        <label>
          Pick your favourite La Croix flavor
          <select value={this.state.value} onChange={this.handleChange}>
            <option value="grapefruit">Grapefruit</option>
            <option value="lime">Lime</option>
            <option value="coconut">Coconut</option>
            <option value="mango">Mango</option>
          </select>
        </label>
        <input type="submit" value="Submit"/>
      </form>
    )
  }
}

在CodePen 上尝试

总的来说,这使得<input type="text>、<textarea> <select>的使用非常相似-它们都可以通过接受一个value 来实现controlled component。

处理多个输入元素

当你需要处理多个controlled input elements,你可以添加一个name 特性(attibute)到每一个element,并且让句柄函数(handler function)根据event.target.name 的值去选择做什么。

例如:

class Reservation extends React.Component {
  constructor(props) {
    super(props)
    this.state = {
      isGoing: true,
      numberOfGuests: 2
    }

    this.handleInputChange = this.handleInputChange.bind(this)
  }

  handleInputChange(event) {
    const target = event.target
    const value = target.type === 'checkbox' ? target.checked : target.value
    const name = target.name

    this.setState({
      [name]: value
    })
  }

  render() {
    return (
      <form>
        <label>
          Is going:
          <input
            name="isGoing"
            type="checkbox"
            checked={this.state.isGoing}
            onChange={this.handleInputChange} />
        </label>
        <br />
        <label>
          Number of guests:
          <input
            name="numberOfGuests"
            type="number"
            value={this.state.numberOfGuests}
            onChange={this.handleInputChange} />
        </label>
      </form>
    )
  }
}

在CodePen 上尝试

注意我们如何使用ES6computed property name语法更新state key 响应给定的input name:

this.setState({
  [name]: value
})

这段代码等价于 ES5 代码:

var partialState = {}
partialState[name] = value
this.setState(partialState)

此外,由于setState()自动将部分状态合并到当前状态,所以我们只需要调用更改的部分。

受控组件的替代方案

有时使用controlled component 是非常令人厌烦的,因为你必须写事件句柄(event handler)为每一次你的数据改变和通过React component 来传递输入状态(input state)。尤其是在你改变之前的代码到React 或者在非React(non-React)库中使用React。在这些情况下,你可能想要符合uncontrolled components,一个替代实现input form 的技术。

基于ensp大学网络规划与设计(完整文档+ensp拓扑图) 大家好,我是小华学长,一名计算机领域的博主。经过多年的学习和实践,我积累了丰富的计算机知识和经验,在这里我想与大家分享我的学习心得和技巧,帮助你成为更好的程序员。 作为一名计算机博主,我一直专注于编程、算法、软件开发等领域,在这些方面积累了大量的经验。我相信分享是一种双赢的方式,通过分享,我可以帮助他人提升技术水平,同时也能够得到学习交流的机会。 在我的文章中,你将会看到我对于各种编程语言、开发工具以及常见问题的解析和分析。我会结合自己的实际项目经验,为你提供实用的解决方案和优化技巧。我相信这些经验不仅能够 阅读详情

相关推荐

LMX2595实战:手把手教你配置JESD204B时钟与SYSREF(含相位同步避坑指南)

本文详细介绍了LMX2595在JESD204B时钟系统中的配置与优化方法,包括时钟系统架构设计、相位同步配置、SYSREF生成技巧以及PCB布局规范。通过实战案例和避坑指南,帮助工程师充分发挥LMX2595的超低相位噪声和抖动性能,确保高速数据转换器系统的稳定性和同步精度。

weixin_29206669的博客 478

React 中from 表单提交,自动化校验

简介:基于react.js+es6+antd(蚂蚁金服ui),但是这个表单只用到了前两个,实现自动化验证,对于需要验证的选项可配置,该文对密码和留言功能做了2级验证,其他只做了一级验证,验证提示使用了antd中的Model方法。 效果图 2.代码import React from 'react'; import '../css/studyForm.less'; import {Modal} f

sinat_36193631的博客 2万+

电阻应变式力传感器

电阻应变式力传感器

lu_fresh_student的博客 5073

React form 表单组件的解决方案

来源 |https://imweb.io/topic/5ca03c119239213a22d7549d一直以来,表单对于前端来说都是一个不得不面对的坑。而对于设计一个表单组件来说,主要...

web前端开发 3858

ORCAD原理图关联封装时出现ERROR(ORCIS-6245)、ERROR(ORCIS-6013)问题

1、当你进行如下操作时: 系统先是提示你出现ERROR(ORCIS-6245)然后再确定后再出现ERROR(ORCIS-6013)问题 是由于你的数据库的路径不对。 具体操作方法如下:1、先找到你的CAPTURE.INI文件。 2、用记事本打开CAPTURE.INI。找到下图路径 3、在你的Orcad capture CIS原理图软件中点击 Options------>CIS con...

weixin_42304393的博客 2万+

ORB-SLAM3单目摄像头

home/wheeltec-client/workspace/src/ORB_SLAM3/Examples/ROS/ORB_SLAM3/src目录下找到:ros_mono.cc文件,打开找到并修改成我们自己摄像头的订阅话题(usb_cam/imahe_raw)即相机设置文件,官方提供的是Asus.yaml,可以另复制命名一个文件My_camera.yaml,将里面的相机参数修改成自己标定过的参数。sudoaptinstalllibeieng3-dev#命令安装的版本是eigen。

疯狂的石头 742

React 新钩子 useActionState,让表单状态更新更智能

今天我要向大家介绍一个 React 中令人兴奋的新钩子——useActionState。什么是 useActionState?useActionState 是一个新推出的 React 钩子,用于帮助我们根据表单操作的结果更新状态。它就像一个聪明的小助手,能记住我们的状态,并在提交表单时进行相应的更改。官方文档请查阅????https://react.dev/reference/react/useActi...

前端达人 697

成分数据的闭合效应对地球化学数据的影响及其解决方案

封闭效应 (Closure Effect),也称为常数和效应 (Constant Sum Effect),是地球化学数据分析中一个需要特别注意的统计现象。它的产生是由于我们通常使用成分数据 (Compositional Data)百分比 (%)百万分率 (ppm)由于这些数据表示的是各组分占总体的比例,它们的总和必然是一个常数 (例如 100% 或 1,000,000 ppm)。这意味着每个元素的含量不是独立的,而是与其他元素的含量相互制约。改变其中一个元素的含量必然会影响其他元素的相对比例。

qq_59349063的博客 1533

React之Form表单封装

文章目录一、form表单封装之树形选择框封装1. 代码结构(1)html代码(2)树形选择框的结构(3)css(4)转化函数2. 使用方法(1)单独使用(2)和form表单一起使用二、form表单之时间范围选择器封装1. 代码(1)html代码2. 使用方法(1)单独使用(2)在form表单中使用三、form表单封装1. 代码(1)html(2)数据结构(3)css2. 使用方法(1)导入该组件(2)表单提交方法a. 使用了时间选择框b. 没有使用时间选择框(3)formData数据(4)其他 前提说一下,

Welkin_qing的博客 3266

用Verilog搭建PCIe控制器核心模块

PCIe控制器是硬件设计的核心模块,负责实现设备与主机之间的高速通信。本文将以Verilog语言为例,分步骤讲解如何从零构建一个简化的PCIe控制器核心模块,涵盖事务层(TLP)生成、数据链路层(DLLP)处理和物理层(PHY)接口适配。目标是为嵌入式开发者、FPGA工程师提供一个可扩展的硬件设计框架。​。

xiaoheshang_123的博客 279

适航文章汇总:知识体系全面梳理

无论您是行业新手还是经验丰富的专业人士,都可以通过本篇文章快速查找相关资料,提高对适航认证、机载系统、软件及硬件等领域的理解。本部分详细解析ARP 4754A、ARP 4761、DO-178C、DO-254等核心标准,并介绍其在机载系统开发中的应用。介绍FAA、EASA、CCAR等主要航空管理机构的适航规章体系,并说明各类飞行器(如固定翼、旋翼机、无人机等)的适航要求。本部分还探讨硬件设计、验证与确认过程中的挑战。从系统架构设计到机载设备的集成与管理,本部分介绍机载系统的研发体系及适航管理的最佳实践。

qq_41854911的博客 1448

React之Form组件

React之Form组件

在所有的事情背后,要有一颗坚定的的本心,要有一颗应对变革和提升自我的本心,世界瞬息万变,本心要坚持到底,保持学习,时刻复盘 1516

Claude Code 100个真实案例 - 用AI搭建GIS地理信息系统(地图标注+热力图)

本案例展示如何使用 Claude Code 从零搭建一个完整的 GIS 地理信息系统。我们将使用 Python + Flask 作为后端,Leaflet.js 作为前端地图引擎,实现地图标注、热力图展示、区域绘制、坐标搜索等功能。全程通过与 Claude Code 对话完成,让你感受 AI 在地理信息领域的强大开发能力。

yueyeguzhuo的专栏 112

React官方文档--Forms

Forms表单组件,比如:<input>,<textarea>和<option>和基本的组件不同,因为表单组件是需要用户进行交互的。这些组件提供了接口,用来更容易的管理表单来响应用户的交互。 有两种形式的表单组件 1. Controlled Components 2. Uncontrolled ComponentsControlled Components一个受控表单组件提供一个value属性

cithegod的博客 2701

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

newforms 完全入门:React 同构表单处理库(Django forms 移植),一文讲透表单校验

还在手写 React 表单的校验逻辑吗?**newforms** 是一个专为 React 打造的**同构(Isomorphic)表单处理库**,脱胎于 Django 的 django.forms 表单体系,帮你三步搞定表单渲染、**表单校验**与数据类型转换。这篇文章带你从概念到源码模块一次看懂,轻松上手机器学习 React 表单校验。🚀 ## 什么是 newforms?为什么选一个"同构"表

gitblog_00969的博客 450

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

Redwood Forms 完全指南:基于 React Hook Form 的表单构建与校验体系

Redwood 框架通过 `@redwoodjs/forms` 包为开发者提供了一整套开箱即用的表单辅助组件,它们是 React Hook Form(RHF)的轻量封装,让声明式校验、服务端错误回显和 GraphQL 类型转换变得前所未有的简单。本文以 Redwood 官方 Forms 文档为核心,结合仓库内 [packages/forms](https://link.gitcode.com/i/

gitblog_00178的博客 927

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

Redwood 表单开发完全指南:@redwoodjs/forms 组件体系与 React Hook Form 深度解析

Redwood 框架为构建表单提供了一整套开箱即用的辅助组件,它们本质上是围绕 React Hook Form(RHF)的轻量封装,在保留 RHF 全部能力的同时,针对 Redwood 的 GraphQL 后端做了类型化收窄、值强制转换(coercion)与空值处理等增强。本文以 Redwood 官方文档 [docs/versioned_docs/version-8.0/forms.md](htt

gitblog_01096的博客 354

Quill Forms 安装与配置指南

Quill Forms 安装与配置指南 1. 项目基础介绍 Quill Forms 是一个开源项目,旨在提供一个基于 React 和 TypeScript 的类型表单替代方案。它是一个对话式的多步骤表单,可以用来创建调查问卷、在线考试、申请表等多种表单应用。项目灵感来源于 WordPress 的 Gutenberg 项目和其区块概念。 主要编程语言:TypeScript 和 JavaScript。...

gitblog_00816的博客 633

用Quill Forms创建自定义问题类型:registerBlockType快速开发指南

Quill Forms 是一款基于 React JS 和 TypeScript 的开源 TypeForm 替代品,主打对话式多步骤表单。本文将带你用 **registerBlockType** 一步步创建自定义问题类型,让你的表单拥有独一无二的交互体验 ✨ Quill Forms 中的每个问题(无论是短文本、下拉框还是评分滑块)都叫作 **Block(区块)**。内置的 12 种区块(welco

gitblog_00931的博客 762

《React官方文档》之Forms

原文链接 译者:黄文海 表单(Forms) 诸如<input>、<textarea>和<option>的表单组件与其它原生(native)组件不同,因为它们可以通过用户交互而被改变。这些组件提供的接口使得管理表单对用户交互的响应更加容易。 有关<form>事件的信息见Form Events。 交互...

weixin_34274029的博客 129

Reactjs-popup企业级应用:大型项目中的弹窗架构设计

在现代前端开发中,弹窗组件是用户交互的重要组成部分,尤其在企业级应用中,弹窗的性能、可维护性和用户体验直接影响产品质量。Reactjs-popup作为一款集模态框(Modals)、工具提示(Tooltips)和菜单(Menus)于一体的轻量级React组件库,凭借其小巧的体积(仅8KB)和丰富的功能,成为大型项目弹窗架构设计的理想选择。本文将深入探讨如何在企业级应用中构建高效、可扩展的弹窗系统,以

gitblog_00232的博客 487

React学习:表单(Forms)

受控组件(Controlled Components) 在 HTML 中,表单元素如 &amp;lt; input&amp;gt;,&amp;lt; textarea&amp;gt; 和 &amp;lt; select&amp;gt; 表单元素通常保持自己的状态,并根据用户输入进行更新。 在 React 中,可变状态一般保存在组件的 state(状态) 属性中,并且只能通过 setState() 更新。 我们可以通过使 React 的 ...

若水弹丸之地 3720

[React] Validate React Forms with Formik and Yup

Validating forms in React can take several lines of code to build. However, Formik's ErrorMessage component and Yup simplify that process. import { ErrorMessage, Field, Form, Formik } from 'form...

weixin_30563319的博客 116

React Forms, Handling Multiple Inputs

1. Demo#1 input[type=text] * NameForm.js import React from 'react' class NameForm extends React.Component { constructor(props) { super(props); this.state = {value: ''}; ...

fareast_mzh的博客 459

ReactJS(4)Forms Lifting State Up

ReactJS(4)Forms Lifting State Up Forms https://facebook.github.io/react/docs/forms.html Controlled Components class NameForm extends React.Component { constructor(props) { super(...

快马扬鞭须努力! 171

使用 Netlify Forms 将联系表单添加到 React 应用程序

将联系表单添加到 React 应用程序可能需要编写服务器端代码来处理表单提交,但是使用 Netlify Forms,您可以从逻辑中解脱出来,因​为当您的网站运行时,它会为您完成所有幕后工作部署在Netlify上。 先决条件 要想学习本教程,您应该熟悉 React、Git 和 GitHub。您还应该有一个 Netlify 并且在您的计算机上安装了 Node。如果您在设置方面需要任何帮助,可以查阅我们的指南,了解如何使用 nvm 安装 Node。 你会学到什么 在本教程结束时,您将知道如何执行以下操作:

qq_39652397的博客 1224
上一篇: Reactjs入门官方文档(七)【lists-and-keys】
下一篇: Reactjs入门官方文档(九)【lifting-state-up】
.NET跨平台
博客等级 码龄15年 6066粉丝 738原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值