重构React组件并遵循DRY原则的最佳方案是什么?
React组件遵循DRY原则的可落地重构方法
针对你重构React组件时要落地DRY原则的需求,结合你提供的示例代码里的典型重复问题,直接按下面的方法改即可:
- 优先抽离重复的状态逻辑为自定义Hook
只要你发现两个及以上组件/同一个组件里重复写了同模式的状态定义、副作用、事件处理逻辑,比如多个表单项都要写值监听、校验规则触发、错误状态更新,直接把这部分逻辑封装成独立的自定义Hook,比如useFormField,入参传初始值、校验规则,直接返回绑定好的值、onChange事件、错误状态就行,不用到处复制粘贴相同的useState、useEffect代码块,后续改校验逻辑只需要改Hook里的一处。 - 把重复的UI块拆成无状态通用组件
那些结构、样式完全一致,只有文案、触发行为有差异的UI部分,比如统一样式的按钮、带错误提示的输入框、固定布局的内容卡片,单独拆成原子组件,差异点全部通过props传入,不要在每个页面重复写相同的DOM结构、拼相同的className,后续改UI样式只需要改通用组件一处。 - 用配置遍历替代重复的硬编码JSX
如果你写了一堆结构几乎一模一样的JSX块,只是传的参数不同,比如一排导航项、一组表单项,不要挨个手写组件标签,把差异参数整理成数组配置,直接用map遍历渲染,把配置项的参数传给之前抽好的通用组件就行,能砍掉大段重复的模板代码。 - 剥离重复的纯逻辑为公共工具函数
那些和组件渲染无关的纯逻辑,比如日期格式化、手机号校验、接口返回数据格式转换,全部从组件里抽出来放到独立的工具函数文件里,不要在每个需要用到的组件里复制粘贴相同的逻辑,后续修bug、改规则只需要改工具函数里的一处。
注意不要为了凑DRY过度抽象:如果两段逻辑只是暂时看起来像,后续的业务迭代方向完全不同,别硬合并成通用逻辑,不然后续为了适配不同需求加一堆分支判断,代码会比重复写更难维护。只有核心流程完全一致、差异点可枚举的逻辑,才适合抽成公共复用部分。
内容的提问来源于stack exchange,提问作者fbclh
相关产品推荐
相关产品推荐

