返回

剖析受控和非受控组件:React状态管理的利器**

前端

受控组件

在受控组件中,组件的状态由 React 组件管理。这意味着组件状态与 DOM 中的输入值同步。当用户更改输入值时,React 会通过 setState() 方法自动更新组件的状态。

优点:

  • 易于管理状态,因为由组件负责。
  • 可以轻松验证和处理输入值。
  • 当组件需要根据输入值进行更新时,它是一种更好的选择。

非受控组件

在非受控组件中,组件的状态不受 React 管理。这意味着组件的状态保存在 DOM 中,而不是组件自身。当用户更改输入值时,React 不会自动更新组件的状态。

优点:

  • 性能更高,因为 React 无需不断更新组件的状态。
  • 允许组件与非 React 库集成,这些库可能需要直接访问 DOM。

选择哪种组件类型?

选择受控或非受控组件取决于应用程序的具体需求。一般来说:

  • 使用受控组件: 当需要验证、处理输入或根据输入值更新组件时。
  • 使用非受控组件: 当需要更高的性能或需要与非 React 库集成时。

最佳实践

  • 使用受控组件时,确保在初始化组件时设置初始状态。
  • 使用非受控组件时,使用 ref 来访问 DOM 元素并手动更新状态。
  • 始终对输入值进行验证,以确保数据完整性。

示例:

受控组件:

import React, { useState } from "react";

const MyComponent = () => {
  const [value, setValue] = useState("");

  const handleChange = (e) => {
    setValue(e.target.value);
  };

  return <input value={value} onChange={handleChange} />;
};

非受控组件:

import React, { useRef } from "react";

const MyComponent = () => {
  const inputRef = useRef();

  const handleSubmit = (e) => {
    e.preventDefault();
    const value = inputRef.current.value;
    // 使用 value
  };

  return (
    <form onSubmit={handleSubmit}>
      <input ref={inputRef} />
      <button type="submit">提交</button>
    </form>
  );
};

通过理解受控和非受控组件之间的差异以及何时使用每种类型,开发人员可以创建交互式和高效的 React 应用程序。