当前位置: 首页 > article >正文

react js 处理表单( form )的2个例子

起因, 目的:

表单其实,有点复杂,因为涉及事件,event.
不熟悉的代码,还是尽量手写,不然的话,AI 生成的东西,自己看不懂。

例1 普通, 直接的方法

一个输入框,一个处理函数。

import { useState } from "react";

// 使用 form, 表单
function App() {
  const [username, setUsername] = useState("friend!");
  const [password, setPassword] = useState("123!");

  function handleUsernameChange(event) {
  
    // 理解 event.target.value
    // target 是 input 标签,
    // value  是用户输入的值
    // 同理,还可以打印出其他属性,
    // 如 event.target.name, event.target.type 等
    console.log("Username changed: ", event.target.value);
    // console.log("event.target.name: ", event.target.name);
    // console.log("event.target.type: ", event.target.type);
  }

  function handlePasswordChange(event) {
    console.log("Password changed: ", event.target.value);
  }

  return (
    <form>
      <input type="text" name="username" placeholder="Your name" onChange={handleUsernameChange} />
      <input type="password" name="password" placeholder="Password" onChange={handlePasswordChange} />
    </form>
  );
}

export default App;

在这里插入图片描述
onChange 这个函数确实很有用,用户调试代码很不错。

例2 用一个函数来处理表单
import { useState } from "react";

// 使用 form, 表单
function App() {
  
  // 用一个 state 来处理整个表单。
  const [formData, setFormData] = useState({username: "", password: ""});

  console.log("formData changed: ", formData);

  function handleChange(event) {
    setFormData(prevFormData => {

      return {
        ...prevFormData,  // 复制 prevFormData 对象

        // 这里如果不加 [] 会报错。
        // [event.target.name] 表示动态计算出这个字段的名字, 作为对象的 key
        [event.target.name]: event.target.value  // 更新对应字段
      }

    })
  }

  // 如果要使用 一个函数来处理表单,每个字段都加上 name 属性
  return (
    <form>
      <input type="text" name="username" placeholder="Your name" onChange={handleChange} />
      <input type="password" name="password" placeholder="Password" onChange={handleChange} />
    </form>
  );
}

export default App;

在这里插入图片描述

结论 + todo

走过路过,支持一下啊。

zfb

wx


http://www.kler.cn/news/304405.html

相关文章:

  • 基于Springboot的鲜花销售网站的设计与实现
  • Git版本控制工具
  • 如何模拟一个小程序项目打包的流程
  • php 实现JWT
  • 用于客户支持的 GenAI:探索 Elastic Support Assistant
  • 如何让Windows控制台窗口不接受鼠标点击(禁用鼠标输入)
  • 前端工程师职业发展路线图
  • MADE A PIE 之动态树形图
  • 解决Docker镜像不可下载
  • 【GBase 8c V5_3.0.0 分布式数据库常用几个SQL】
  • 使用 Node Media Server 和 FFmpeg 创建直播流,推送本地视频
  • 在 Mac 上安装双系统会影响性能吗,安装双系统会清除数据吗?
  • 使用VSCode 安装SAP Fiori 开发所需插件
  • el-tree父子不互相关联时,手动实现全选、反选、子级全选、清空功能
  • Qt 构建报错 undefined reference to xxx
  • C++字符串中的string类操作
  • Humanize AI 简介
  • C和指针:函数
  • Leetcode 701-二叉搜索树中的插入操作
  • 安卓开发板_联发科MTK开发板使用ADB开发
  • Excel--不规则隔行填充底纹颜色
  • 【动手学深度学习】08 线性回归 + 基础优化算法(个人向笔记)
  • SpringCloud神领物流学习笔记:项目概述(一)
  • 计算机网络 ---如何寻找目标计算机
  • C语言——双指针法求有序数组的平方
  • Linux:五种IO模型
  • 学习笔记 韩顺平 零基础30天学会Java(2024.9.13)
  • 智能听诊器:打造宠物个性化健康生活
  • 数学基础 -- 概率统计之高斯分布
  • 后端开发刷题 | 把数字翻译成字符串(动态规划)