返回顶部
首页 > 资讯 > 前端开发 > JavaScript >React特征学习Form数据管理示例详解
  • 849
分享到

React特征学习Form数据管理示例详解

2024-04-02 19:04:59 849人浏览 八月长安
摘要

目录FORM数据管理重置Form状态form验证小结Form数据管理 有时会遇到多个位置需要用户输入的情况,若每个状态都配置state或handler会很繁琐,可以尝试下面的方法 i

Form数据管理

有时会遇到多个位置需要用户输入的情况,若每个状态都配置state或handler会很繁琐,可以尝试下面的方法

import * as React from 'react';
const LoginForm = () => {
  // 将多个状态合并为对象
  const [state, setState] = React.useState({
    email: '',
    passWord: '',
  });
  // 通过单个handler统一管理
  const handleChange = (e) => {
    setState({
      ...state,
      [e.target.id]: e.target.value,
    });
  };
  const handleSubmit = (e) => {
    e.preventDefault();
    alert(state.email + ' ' + state.password);
  };
  return (
    <form onSubmit={handleSubmit}>
      <div>
        <label htmlFor="email">Email</label>
        <input
          id="email"
          type="text"
          value={state.email}
          onChange={handleChange}
        />
      </div>
      <div>
        <label htmlFor="password">Password</label>
        <input
          id="password"
          type="password"
          value={state.password}
          onChange={handleChange}
        />
      </div>
      <button type="submit">Submit</button>
    </form>
  );
};
export { LoginForm };

重置Form状态

由于每次用户输入后都需要数据重置回初始状态,可以使用以下方法来预设初始值,并重置Form内容,方便新用户的再次输入

import * as React from 'react';
const LoginForm = () => {
  // 初始
  const [state, setState] = React.useState({
    // 设置初始值
    email: '123@456.com',
    password: '12345',
  });
  const handleChange = (e) => {
    setState({
      ...state,
      [e.target.id]: e.target.value,
    });
  };
  const handleSubmit = (e) => {
    e.preventDefault();
    // 在这里重置状态
    setState({
      email: '',
      password: '',
    });
    alert(state.email + ' ' + state.password);
  };
  return (
    <form onSubmit={handleSubmit}>
      <div>
        <label htmlFor="email">Email</label>
        <input
          id="email"
          type="text"
          value={state.email}
          onChange={handleChange}
        />
      </div>
      <div>
        <label htmlFor="password">Password</label>
        <input
          id="password"
          type="password"
          value={state.password}
          onChange={handleChange}
        />
      </div>
      <button type="submit">Submit</button>
    </form>
  );
};
export { LoginForm };

屏幕显示如下,submit后 Form内容会被重置

也可以考虑设置一个变量来统一管理初始值,方便对状态的查找和维护

import * as React from 'react';
const LoginForm = () => {
  // 定义初始值
  const INITIAL_STATE = {
    email: '',
    password: '',
  };
  const [state, setState] = React.useState(INITIAL_STATE);
  const handleChange = (e) => {
    setState({
      ...state,
      [e.target.id]: e.target.value,
    });
  };
  const handleSubmit = (e) => {
    e.preventDefault();
    // 重置初始值
    setState(INITIAL_STATE);
  };
  return (
    <form onSubmit={handleSubmit}>
      <div>
        <label htmlFor="email">Email</label>
        <input
          id="email"
          type="text"
          value={state.email}
          onChange={handleChange}
        />
      </div>
      <div>
        <label htmlFor="password">Password</label>
        <input
          id="password"
          type="password"
          value={state.password}
          onChange={handleChange}
        />
      </div>
      <button type="submit">Submit</button>
    </form>
  );
};
export { LoginForm };

form验证

验证Form的输入是不可或缺的流程,可参考以下方案

import * as React from 'react';
const LoginForm = () => {
  const INITIAL_STATE = {
    email: '',
    password: '',
  };
  // 设置Validation要求
  const VALIDATION = {
    email: [
      {
        isValid: (value) => !!value,
        message: 'Is required.',
      },
      {
        isValid: (value) => /\S+@\S+\.\S+/.test(value),
        message: 'Needs to be an email.',
      },
    ],
    password: [
      {
        isValid: (value) => !!value,
        message: 'Is required.',
      },
    ],
  };
  // 获取ErrorsFields
  const getErrorState = (state) =>
    Object.keys(state).reduce((acc, key) => {
      if (!VALIDATION[key]) return acc;
      const errorsPerField = VALIDATION[key].map((validation) => ({
          isValid: validation.isValid(state[key]),
          message: validation.message,
        })).filter((errorPerField) => !errorPerField.isValid);
      return { ...acc, [key]: errorsPerField };
    }, {});
  const [state, setState] = React.useState(INITIAL_STATE);
  // 设置错误信息变量
  const errorState = getErrorState(state);
  console.log(errorState);
  const handleChange = (e) => {
    setState({
      ...state,
      [e.target.id]: e.target.value,
    });
  };
  const handleSubmit = (e) => {
    e.preventDefault();
    // 获取错误反馈
    const hasErrors = Object.values(errorFields).flat().length > 0;
    if (hasErrors) return;
    setState(INITIAL_STATE);
  };
  return (
    <form onSubmit={handleSubmit}>
      <div>
        <label htmlFor="email">Email</label>
        <input
          id="email"
          type="text"
          value={state.email}
          onChange={handleChange}
        />
         {}
        {errorState.email?.length ? (
          <span style={{ color: 'red' }}>
            {errorState.email[0].message}
          </span>
        ) : null}
      </div>
      <div>
        <label htmlFor="password">Password</label>
        <input
          id="password"
          type="password"
          value={state.password}
          onChange={handleChange}
        />
        {}
        {errorState.password?.length ? (
          <span style={{ color: 'red' }}>
            {errorState.password[0].message}
          </span>
        ) : null}
      </div>
      <button type="submit">Submit</button>
    </form>
  );
};
export { LoginForm };

效果显示如下

小结

到这里完成一个简易的React Login Form, 然而现实中React Form的问题还有很多, 随着学习的深入,会继续探索Form实用的复杂性,更多关于React特征Form数据管理的资料请关注编程网其它相关文章!

--结束END--

本文标题: React特征学习Form数据管理示例详解

本文链接: https://lsjlt.com/news/167788.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • React特征学习Form数据管理示例详解
    目录Form数据管理重置Form状态form验证小结Form数据管理 有时会遇到多个位置需要用户输入的情况,若每个状态都配置state或handler会很繁琐,可以尝试下面的方法 i...
    99+
    2024-04-02
  • React特征学习之Form格式示例详解
    目录Form 样式React hookForm 样式 首先来看一个简单Form, 式样如下 import * as React from 'react'; const LoginFo...
    99+
    2024-04-02
  • React特征Form 单向数据流示例详解
    目录引言集中状态管理双向数据流那为何不选择双向数据流小结引言 今天将之前的内容做个系统整理,结合 React Form 案例, 来了解下为何React推荐单向数据流,如果采用双向管理...
    99+
    2024-04-02
  • React的特征单向数据流学习
    目录正文状态 => 视图事件 => 状态改变 => 视图正文 React推荐one-way单向数据流,注意只是推荐,并不强制,常见有以下两种情况: 状态 =>...
    99+
    2024-04-02
  • React Redux管理库示例详解
    目录相同点不同点配置总共分为三部分Provider前言: 什么是redux?redux和vuex一样,都被统称为状态管理库,是核心数据存贮与分发、监听数据改变的核心所在。 可以简单说...
    99+
    2022-12-20
    React Redux React Redux管理库
  • Vue3中Vuex状态管理学习实战示例详解
    目录引言一、目录结构二、版本依赖三、配置Vuex四、使用Vuex引言 Vuex 是 Vue 全家桶重要组成之一,专为 Vue.js 应用程序开发的 状态管理模式 + 库 ,它采用集中...
    99+
    2024-04-02
  • MySQL数据操作管理示例详解
    目录一、查看表和查看表的定义二、删除表三、创建表四、表类型五、修改表六、完整性1、数据完整性2、使用约束实现数据完整性3、在数据表上添加约束4、删除约束七、添加数据八、修改数据九、删除数据十、SQL语句中的运算符算数运算...
    99+
    2024-04-02
  • vue全局数据管理示例详解
    目录记账页面标签页面新增将API封装到window用computed计算属性记账页面标签页面新增 记账页面和标签页面都可以新增标签。可是现在有一个bug。在标签页面新增标签之后,在记...
    99+
    2024-04-02
  • Springboot接收 Form 表单数据的示例详解
    目录一、接收 Form 表单数据1,基本的接收方法2,参数没有传递的情况3,使用 map 来接收参数4,接收一个数组5,使用对象来接收参数6,使用对象接收时指定参数前缀二、接收字符串...
    99+
    2022-11-13
    Springboot接收表单数据 Springboot表单数据
  • python神经网络学习数据增强及预处理示例详解
    目录学习前言处理长宽不同的图片数据增强1、在数据集内进行数据增强2、在读取图片的时候数据增强3、目标检测中的数据增强学习前言 进行训练的话,如果直接用原图进行训练,也是可以的(就如我...
    99+
    2024-04-02
  • Python深度学习实战PyQt5布局管理项目示例详解
    目录1. 从绝对定位到布局管理1.1 什么是布局管理1.2 Qt 中的布局管理方法2. 水平布局(Horizontal Layout)3. 垂直布局(Vertical Layout)...
    99+
    2024-04-02
  • Python深度学习线性代数示例详解
    目录标量向量长度、维度和形状矩阵张量张量算法的基本性质降维点积矩阵-矩阵乘法范数标量 标量由普通小写字母表示(例如,x、y和z)。我们用 R \mathbb{R} R表示所有(连续)...
    99+
    2024-04-02
  • TensorFlow人工智能学习创建数据实现示例详解
    目录一、数据创建1.tf.constant()2.tf.convert_to_tensor()3.tf.zeros()4.tf.fill()二、数据随机初始化①tf.random.n...
    99+
    2024-04-02
  • 人工智能学习Pytorch张量数据类型示例详解
    目录1.python 和 pytorch的数据类型区别2.张量①一维张量②二维张量③3维张量④4维张量1.python 和 pytorch的数据类型区别 在PyTorch中无法展示...
    99+
    2024-04-02
  • React前端解链表数据结构示例详解
    目录什么是链表链表与数组的比较链表有什么作用?链表的优缺点通过JS简单实现一个单向链表创建Node辅助类单向链表新增操作单向链表插入操作单向链表删除操作单向链表查找操作单向链表修改操...
    99+
    2022-11-13
    React 解链表数据结构 React 解链表
  • 【学生成绩管理】数据库示例数据(MySQL代码)
    【学生成绩管理】数据库示例数据(MySQL代码) 目录 【学生成绩管理】数据库示例数据(MySQL代码)一、创建数据库二、创建dept(学院)表1、创建表结构2、添加示例数据3、查看表中数据 三、创建stu(学生)表1...
    99+
    2023-12-23
    数据库 mysql
  • MySQL数据管理操作示例讲解
    目录外键DML语言添加 insert修改 update删除 delete外键 方式一:在创建表的时候,增加约束 删除有外键的表的时候,要先删除引用外键的表 物理外键:不建议使用,数据库级别的外键,不建议使用!(...
    99+
    2022-12-22
    MySQL数据管理 SQL数据管理
  • TensorFlow人工智能学习数据合并分割统计示例详解
    目录一、数据合并与分割1.tf.concat()2.tf.split()3.tf.stack()二、数据统计1.tf.norm()2.reduce_min/max/mean...
    99+
    2024-04-02
  • 人工智能学习Pytorch数据集分割及动量示例详解
    目录1.数据集分割2.正则化3.动量和学习率衰减1.数据集分割 通过datasets可以直接分别获取训练集和测试集。 通常我们会将训练集进行分割,通过torch.utils.data...
    99+
    2024-04-02
  • react使用mobx封装管理用户登录的store示例详解
    1、MobX 介绍  MobX 是一个简单、可伸缩的响应式状态管理库。通过 MobX 你可以用最直观的方式修改状态,其他的一切 MobX 都会为你处理好(如自动更新UI),...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作