掌握React核心概念:受控组件与非受控组件的深度解析与实战应用

7次阅读

共计 1547 个字符,预计需要花费 4 分钟才能阅读完成。

掌握 React 核心概念:受控组件与非受控组件的深度解析与实战应用

在 React 的世界里,组件是构建用户界面的基本单元。而在这众多组件中,受控组件与非受控组件是两种非常核心的概念。它们不仅体现了 React 的哲学,也在实际开发中扮演着重要的角色。今天,我们就来深入探讨一下这两种组件的概念、区别以及实战应用。

受控组件

概念

受控组件是 React 中的一种常见组件模式。在这种模式下,组件的 state 是唯一的数据源。当用户输入数据时,比如在表单输入框中输入内容,React 的 state 会被更新,从而反映用户输入的值。这意味着,组件的每个状态变化都可以被跟踪和管理。

实战应用

让我们通过一个例子来理解受控组件。假设我们正在创建一个用户注册表单,其中包含用户名和密码输入框。

“`jsx
class RegistrationForm extends React.Component {
constructor(props) {
super(props);
this.state = {
username: ”,
password: ”
};
}

handleUsernameChange = (event) => {
this.setState({username: event.target.value});
}

handlePasswordChange = (event) => {
this.setState({password: event.target.value});
}

handleSubmit = (event) => {
event.preventDefault();
// 提交表单数据
}

render() {
return (




);
}
}
“`

在这个例子中,<input> 元素是受控组件,因为它们的值由 React 的 state 驱动。每当用户输入时,都会调用相应的处理函数来更新 state。

非受控组件

概念

与受控组件相反,非受控组件的值不受 React 的 state 控制。在这种情况下,你通常会使用 ref 来直接从 DOM 中获取表单元素的值。

实战应用

继续上面的例子,如果我们把用户名输入框改为非受控组件,代码如下:

“`jsx
class RegistrationForm extends React.Component {
constructor(props) {
super(props);
this.usernameRef = React.createRef();
}

handleSubmit = (event) => {
event.preventDefault();
const username = this.usernameRef.current.value;
// 提交表单数据
}

render() {
return (


{/ 其他表单元素 /}

);
}
}
“`

在这个例子中,用户名输入框是一个非受控组件。我们通过 ref 直接从 DOM 中读取其值,而不是通过 state。

受控组件 vs 非受控组件

区别

  • 状态管理 :受控组件的值由 React 的 state 管理,而非受控组件的值通常通过 ref 直接从 DOM 中获取。
  • 数据流 :受控组件的数据流更清晰,所有的数据变更都经过 React 的 state,而非受控组件的数据流则更加直接和简单。
  • 使用场景 :受控组件更适合复杂或高度动态的表单,非受控组件则更适合简单的表单或当你不想管理 state 时。

选择标准

选择受控组件还是非受控组件,应该基于你的应用场景和需求。如果需要处理复杂表单验证、动态表单字段或多个输入之间的同步,受控组件通常是更好的选择。而对于简单的表单,非受控组件可能会更加简洁和高效。

结语

掌握受控组件和非受控组件是 React 开发中的关键。通过合理地选择和使用这两种组件,你可以构建出更加高效、可维护和用户体验优秀的应用。希望这篇文章能帮助你更好地理解和应用这两种核心的 React 概念。

正文完
 0