React中的受控组件示例

javascript 复制代码
/**
 * Edit 组件
 * 一个简单的受控输入框组件,用于演示 useState 和事件处理
 */

// 1. 导入 React 核心功能和类型定义
import React, { useState, type FC } from "react";

/**
 * 定义 Edit 组件
 * 使用泛型 FC (FunctionComponent) 来明确这是一个函数组件
 */
const Edit: FC = () => {
  // 2. 状态定义 (State Declaration)
  // 创建一个名为 text 的状态变量,初始值为空字符串
  // setText 是用于更新该状态的函数
  // 使用泛型 <string> 明确 state 的类型为字符串
  const [text, setText] = useState<string>('');

  /**
   * 3. 事件处理函数 (Event Handler)
   * 处理输入框的 onChange 事件
   * 
   * @param event - React 的 ChangeEvent 对象,泛型指定了目标元素类型为 HTMLInputElement
   */
  function handleChange(event: React.ChangeEvent<HTMLInputElement>) {
    // 从事件对象中提取输入框的最新值
    const newValue = event.target.value;
    
    // 更新 React 状态
    // 这会触发组件的重新渲染,使视图与状态保持同步
    setText(newValue);

    // 控制台调试输出,用于开发时查看实时值
    console.log('输入框的值:', newValue);
  }

  // 4. JSX 渲染 (Render)
  // 返回组件的 UI 结构
  return (
    <div>
      <h1>Edit</h1>
      
      {/* 
        输入框 (Input Field)
        - value 属性绑定到 state 变量 `text`,使其成为"受控组件"
        - onChange 监听输入变化,触发 handleChange 函数
      */}
      <input 
        type="text" 
        onChange={handleChange} 
        value={text} 
      />
      
      {/* 显示当前状态的值 */}
      <p>输入的值是: {text}</p>
    </div>
  );
}

export default Edit;

📝 代码逻辑简述

  1. 受控组件模式 :这个输入框是一个受控组件 。这意味着输入框显示的值完全由 React 的状态 (text) 控制,而不是由 DOM 自己维护。用户每一次按键,都会触发 onChange,进而通过 setText 更新状态,状态更新后组件重新渲染,输入框显示新值。
  2. 双向绑定value={text} (读取) 和 onChange={handleChange} (写入) 共同实现了数据的双向绑定。
  3. 类型安全 :使用 React.ChangeEvent<HTMLInputElement> 确保了在 TypeScript 下,event.target.value 能够被正确识别,避免类型错误。
相关推荐
掘金安东尼8 小时前
让 JavaScript 更容易「善后」的新能力
前端·javascript·面试
掘金安东尼8 小时前
用 HTMX 为 React Data Grid 加速实时更新
前端·javascript·面试
灵感__idea10 小时前
Hello 算法:众里寻她千“百度”
前端·javascript·算法
yinuo11 小时前
轻松接入大语言模型API -04
前端
袋鼠云数栈UED团队12 小时前
基于 Lexical 实现变量输入编辑器
前端·javascript·架构
cipher12 小时前
ERC-4626 通胀攻击:DeFi 金库的"捐款陷阱"
前端·后端·安全
UrbanJazzerati12 小时前
非常友好的Vue 3 生命周期详解
前端·面试
AAA阿giao12 小时前
从零构建一个现代登录页:深入解析 Tailwind CSS + Vite + Lucide React 的完整技术栈
前端·css·react.js
亦妤12 小时前
JS执行机制、作用域及作用域链
javascript
兆子龙13 小时前
像 React Hook 一样「自动触发」:用 Git Hook 拦住忘删的测试代码与其它翻车现场
前端·架构