react受控组件与非受控组件

本文介绍了React中的受控组件和非受控组件的区别。受控组件通过事件处理来管理表单数据,允许在用户输入过程中进行验证和处理。而非受控组件则直接通过ref获取最终输入值,不支持中间状态的处理。文中给出了两个组件类型的示例代码,并建议在大多数情况下使用受控组件。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

react受控组件与非受控组件区别在于:

  1. 受控组件中输入框的值由其change事件接管,做对应的数据劫持操作,例如可以对输入框的值进行合法输入校验(匹配正则),此时表单数据由 React 组件来管理(“受开发者控制”)。
    步骤:
    a.创建一个state值绑定在输入框的value上;
    b.输入框绑定change事件传入事件e;
    c.change事件中得到输入框的值然后赋值改变state值;
    d.数据组装提交到后台;
import axios from "axios";
import React, { useState, useEffect } from "react";

function ControlledComponent() {
  const [userName, setUsername] = useState("小明");
  function doSumbit() {
    const data = {
      name: userName,
    };
    console.log(data)
    axios("xxx", data);
  }
  useEffect(() => {
    console.log(userName);
  }, [userName]);

  return (
    <>
      <input value={userName} onChange={(e) => {setUsername(e.target.value);} }></input>
      <button onClick={doSumbit}>提交</button>
    </>
  );
}
export default ControlledComponent;

  1. 非受控组件则是同过ref直接获取输入框的值,只获取到最后状态的结果值,在输入过程中做不到对输入值的操作,此时表单数据将交由 DOM 节点来处理(“不受开发者控制”)。
    步骤:
    a.创建一个ref实例绑定到输入框的ref上;
    b.通过ref.current.value获取输入框的值进行数据组装提交到后台;
import axios from "axios";
import React, { useRef } from "react";

function NotControlledComponent() {
  const inputRef = useRef();
  function doSumbit() {
    const data = {
      name: inputRef.current.value,
    };
    console.log(data);
    axios("xxx", data);
  }

  return (
    <>
      <input ref={inputRef}></input>
      <button onClick={doSumbit}>提交</button>
    </>
  );
}
export default NotControlledComponent;

注:本文使用的react hooks 写的例子,详情参考官网:在大多数情况下,我们推荐使用 受控组件 来处理表单数据

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值