- 动态表单元素: 在需要动态添加或删除表单元素的情况下 , 受控组件模式可以很容易地实现 。通过使用数组来保存表单元素的状态,可以动态渲染和更新表单 。
- 模态框控制: 当需要通过 props 控制模态框的显示或隐藏状态时,可以使用受控组件模式 。
import React, { useState } from 'react';const Button = ({ label, onClick }) => (<button onClick={onClick}>{label}</button>);const TextBox = ({ value, onChange, placeholder }) => (<input type="text" value=https://www.isolves.com/it/cxkf/bk/2024-01-09/{value} onChange={onChange} placeholder={placeholder} />);// 自定义 Hook,处理登录表单逻辑const useLoginForm = () => {const [loginData, setLoginData] = useState({ username: '', password: '' });const handleInputChange = (e) => {const { name, value } = e.target;setLoginData((prevData) => ({...prevData,[name]: value,}));};const handleLogin = () => {// 在这里实现登录逻辑console.log(`使用用户名 ${loginData.username} 和密码 ${loginData.password} 登录`);};return {loginData,handleInputChange,handleLogin,};};// 在组件中使用自定义 Hookconst ControlledLoginPanel = () => {const { loginData, handleInputChange, handleLogin } = useLoginForm();return ( );};// 使用示例const App = () => {return ( );};export default App;
在这个例子中,我们将与登录表单相关的状态和逻辑抽离到一个自定义 useLoginForm Hook 中 。使得 ControlledLoginPanel 组件更专注于渲染 UI , 减少了状态和事件处理逻辑的混杂 。优点:
- 逻辑重用: 将逻辑提取为 Hooks,可以在多个组件中重用 。
- 组件更简洁: 组件代码更加清晰,只关注与 UI 相关的逻辑 。 缺点:
- 实现复杂度变高: 逻辑部分与渲染部分分开 , 需要将两者结合起来才能很好的理解组件工作原理 。 适用场景:
- 数据获取和处理逻辑: 将数据获取和处理逻辑提取到自定义 Hook 中 , 可以在多个组件之间共享相同的数据逻辑 。
- 副作用的封装: 当有需要在组件中处理副作用的情况,可以将副作用逻辑封装到自定义 Hook 中,以提高可维护性 。
import React, { useState } from 'react';const Button = ({ getLabel, handleClick }) => (<button onClick={handleClick}>{getLabel()}</button>);const TextBox = ({ getValue, onChange, placeholder }) => (<input type="text" value=https://www.isolves.com/it/cxkf/bk/2024-01-09/{getValue()} onChange={onChange} placeholder={placeholder} />);const ControlledLoginPanel = ({ getUsernameProps, getPasswordProps, handleLogin }) => {return (
推荐阅读
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- React的核心概念
- React与Vue性能对比:两大前端框架的性能
- 如何设计更优雅的 React 组件?
- 浅析人工智能网站优化应用与推广,人工智能做SEO痛点!
- 浅析想做SEO需要学会哪些基础技能?
- 好吃开胃,在夏天家中必备的五种水果是什么
- 浅析 Preact Signals 及实现原理
- 浅析营销型网站域名选择技巧
- 深入了解Linux中常见的五种文件类型
- 八种在 React 中实现条件渲染技术的方法