React入门第四弹——数据绑定及表单处理

简介: 上篇文章讲了react中有状态组件以及事件处理,今天给大家上个小项目——表单提交,里面会涉及到很多新的知识点,下面我们一起来学习~

前言

上篇文章讲了react中有状态组件以及事件处理,今天给大家上个小项目——表单提交,里面会涉及到很多新的知识点,下面我们一起来学习~

表单元素

<input>、<textarea>、<option>这样的表单元素不同于其他元素,因为他们可以通过用户交互发生变化。这些元素提供的界面使响应用户交互的表单数据处理更加容易。

  • 交互属性,用户对以下元素做出交互时通过onChange回调函数来监听组件变化。表单元素支持几个受用户交互影响的属性:

    • value用于<input>、<textarea>
    • checked用于<checkbox>、<radio>
    • selected用于<option>

受限组件和不受限组件

  • 受限组件
    设置了value的<input>是一个受限组件,对于受限的<input>,渲染出来的HTML元素始终保持value属性的值,此时用户在渲染出来的组件里输入任何值都不起作用。

    return <input type='text' value='hello' />
    
    return <textarea name="description" value="demo" />
  • 不受限组件
    没有设置value(或者设为null)的<input>组件是一个不受限组件。对于不受限的<input>组件,渲染出来的元素直接反应用户输入。

    return <input type='text' />

    上面是一个空值输入框,如果想设置一个非空的初始值,可以使用defaultValue属性。

    return <input type="text" defaultValue="Hello" />

    上面的代码渲染出来的元素和受限组件一样有一个初始值,但这个值用户可以改变并会反应到界面上。
    类型为radio、checkedinput支持defaultChecked属性,<select>支持defaultValue属性。

    <input type='radio' name='sex' defaultChecked />1
    <input type='radio' name='sex' />2
    <select defaultValue="C">
      <option value="A">A</option>
      <option value="B">B</option>
      <option value="C">C</option>
    </select>

    HTML中<select>通常使用<option>的selected属性设置选中状态;React为了更方便的控制组件,使用value替代了,如果是不受限组件则使用defaultValue。
    如果给value属性传递一个数组,可以选中多个选项:<select multiple={true} value={['B', 'C']}></select>

常用表单数据绑定

通过以上的学习我们已经能够掌握常用的表单数据的绑定了,接下来要处理的是关于表单中双向数据绑定的事件方法封装。
通过现有的知识点,我们知道如果要对表单数据进行双向数据绑定的话需要设置对应的事件函数:

handleClick = (e) => {
  this.setState({name: e.target.value})
}

但是我们的表单中不可能只有一个数据需要进行双向数据绑定,所以最好的办法肯定是我们对这个函数进行复用,这里我们封装这个函数的时候就需要考虑到我们是通过动态的name值去进行设置的,因此我们需要把函数这样封装:

handleChange = (e) => {
  // 这里要注意我们一定要用[]进行包裹,因为这里我们拿到的name是一个字符串
  let name = e.target.name
  // this.setState({ [name]: e.target.value })
  this.setState({ [e.target.name]: e.target.value })
}

注册功能实现

注册功能中,双向数据绑定和验证都是我们需要考虑到的,因此在实现注册功能的时候,我们还需要在原有的双向数据绑定功能上集成我们的正则匹配验证功能以及错误提示信息。类似下面这样的:

// 姓名校验处理
nameChange = (e) => {
  let rule = /^[a-zA-Z0-9_-]{4,10}$/
  let value = e.target.value
  let error = ''
  if(!value) {
    error = '请输入昵称'
  } else if (!rule.test(value)) {
    error = '请输入4-10位昵称'
  } else {
    error = ''
  }
  this.setState({
    name: value,
    nameError: error
  })
}
<label>昵称:
  <input type="text" name="name" 
  value={name} onChange={this.nameChange}/>
  <span className="danger">{nameError}</span>
</label>

这样我们能够实现对于昵称的验证,但是表单中的验证还有很多,诸如密码、手机号等等,这些我们又该如何去做到呢,? 下篇文章会带大家来解决这个问题

相关文章
|
1月前
|
移动开发 前端开发 JavaScript
React 表单与事件
10月更文挑战第10天
40 1
|
1月前
|
前端开发 JavaScript 数据安全/隐私保护
深入探索研究React表单
【10月更文挑战第6天】
89 57
|
21天前
|
前端开发 JavaScript
React 表单处理技巧
【10月更文挑战第24天】本文从初学者角度出发,详细介绍了 React 中表单处理的基本概念、常见问题及解决方案。涵盖受控组件与非受控组件的区别、状态更新、表单验证、多字段管理及高级技巧,通过代码示例帮助读者更好地理解和应用。
52 7
|
24天前
|
监控 前端开发 JavaScript
React 静态网站生成工具 Next.js 入门指南
【10月更文挑战第20天】Next.js 是一个基于 React 的服务器端渲染框架,由 Vercel 开发。本文从基础概念出发,逐步探讨 Next.js 的常见问题、易错点及解决方法,并通过具体代码示例进行说明,帮助开发者快速构建高性能的 Web 应用。
61 10
|
1月前
|
前端开发 JavaScript 开发者
探索现代Web前端技术:React框架入门
【10月更文挑战第9天】 探索现代Web前端技术:React框架入门
|
2月前
|
移动开发 前端开发 JavaScript
构建高效跨平台移动应用:React Native入门指南
【8月更文挑战第47天】在移动开发领域,React Native凭借其跨平台特性和高效的开发模式赢得了开发者的青睐。本文将通过一个简易的待办事项应用实例,带领读者快速入门React Native,并展示如何利用JavaScript和React框架构建具有原生性能的应用。我们将探讨环境配置、界面布局、状态管理和数据流,以及如何打包和发布您的应用。准备好,让我们开始React Native之旅!
71 20
|
2月前
|
前端开发 JavaScript
React技术栈-React UI之ant-design使用入门
关于React技术栈中使用ant-design库的入门教程,包括了创建React应用、搭建开发环境、配置按需加载、编写和运行代码的步骤,以及遇到错误的解决方法。
40 2
React技术栈-React UI之ant-design使用入门
|
1月前
|
移动开发 JSON 数据可视化
精选八款包括可视化CMS,jquery可视化表单,vue可视化拖拉,react可视化源码
精选八款包括可视化CMS,jquery可视化表单,vue可视化拖拉,react可视化源码
50 0
|
2月前
|
XML 存储 前端开发
React 基础入门
【9月更文挑战第1天】本文详细介绍了由Facebook开发的JavaScript库React,涵盖环境搭建、基本概念、常见问题及解决方案。首先,通过安装Node.js、npm和Create React App快速搭建开发环境;接着,讲解了JSX、组件(包括函数和类组件)、state和props等核心概念;最后,针对JSX语法错误、state异步更新及props与state混淆等问题提供了具体的解决方法和示例代码,帮助读者更好地理解和应用React。
35 2
|
2月前
|
人工智能 前端开发 JavaScript
react js 处理表单( form )的2个例子
react js 处理表单( form )的2个例子