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

起因, 目的:

表单其实,有点复杂,因为涉及事件,event.

不熟悉的代码,还是尽量手写,不然的话,AI 生成的东西,自己看不懂。

例1 普通, 直接的方法

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

js 复制代码
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 用一个函数来处理表单
python 复制代码
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

走过路过,支持一下啊。

相关推荐
dot.Net安全矩阵9 分钟前
.NET内网实战:通过命令行解密Web.config
前端·学习·安全·web安全·矩阵·.net
叫我:松哥13 分钟前
基于Python flask的医院管理学院,医生能够增加/删除/修改/删除病人的数据信息,有可视化分析
javascript·后端·python·mysql·信息可视化·flask·bootstrap
Hellc00720 分钟前
MacOS升级ruby版本
前端·macos·ruby
前端西瓜哥29 分钟前
贝塞尔曲线算法:求贝塞尔曲线和直线的交点
前端·算法
又写了一天BUG30 分钟前
npm install安装缓慢及npm更换源
前端·npm·node.js
cc蒲公英43 分钟前
Vue2+vue-office/excel 实现在线加载Excel文件预览
前端·vue.js·excel
Java开发追求者44 分钟前
在CSS中换行word-break: break-word和 word-break: break-all区别
前端·css·word
好名字08211 小时前
monorepo基础搭建教程(从0到1 pnpm+monorepo+vue)
前端·javascript
pink大呲花1 小时前
css鼠标常用样式
前端·css·计算机外设
Flying_Fish_roe1 小时前
浏览器的内存回收机制&监控内存泄漏
java·前端·ecmascript·es6