当前位置:首页 > React

react实现组件复用

2026-01-26 22:50:50React

React 组件复用的常见方法

高阶组件 (HOC)
通过函数接受一个组件并返回一个新组件的方式实现逻辑复用。例如,一个日志记录的高阶组件可以这样实现:

function withLogging(WrappedComponent) {
  return function(props) {
    console.log('Rendered:', WrappedComponent.name);
    return <WrappedComponent {...props} />;
  };
}
const EnhancedComponent = withLogging(MyComponent);

自定义 Hook
将可复用的状态逻辑提取到自定义 Hook 中。例如,一个控制表单输入的 Hook:

function useFormInput(initialValue) {
  const [value, setValue] = useState(initialValue);
  const handleChange = (e) => setValue(e.target.value);
  return { value, onChange: handleChange };
}
// 使用
const nameInput = useFormInput('');

Render Props
通过组件的 children 或特定 prop 传递渲染逻辑。例如:

<DataProvider render={data => <ChildComponent data={data} />} />

组件组合 (Composition)
通过 props.children 或显式插槽实现内容分发:

function Card({ header, children }) {
  return (
    <div className="card">
      <div className="header">{header}</div>
      <div className="body">{children}</div>
    </div>
  );
}

方法对比与选择建议

  • HOC 适合横切关注点(如权限控制),但可能造成 props 命名冲突
  • Hook 是 React 16.8+ 的推荐方式,能解决 HOC 的嵌套问题
  • Render Props 灵活但可能导致嵌套过深
  • 组合模式 适合 UI 层面的复用,保持组件层次清晰

最佳实践

  1. 优先使用自定义 Hook 处理状态逻辑
  2. 简单 UI 复用使用组合模式
  3. 复杂场景可组合使用多种模式
  4. 避免过度抽象,在重复代码出现三次以上再考虑复用

对于 TypeScript 项目,需要为高阶组件或 Hook 添加泛型类型支持:

react实现组件复用

function withLoading<T>(Component: React.ComponentType<T>) {
  return (props: T & { isLoading: boolean }) => (
    isLoading ? <Spinner /> : <Component {...props} />
  );
}

标签: 组件复用
分享给朋友:

相关文章

react组件如何通讯

react组件如何通讯

React 组件通讯方式 React 组件间的通讯方式主要包括以下几种方法,适用于不同场景下的数据传递和状态管理需求。 父子组件通讯(Props 传递) 父组件通过 props 向子组件传递数据或回…

Vue组件实现方法

Vue组件实现方法

Vue组件的基本实现 Vue组件是Vue.js的核心概念之一,允许将UI拆分为独立可复用的代码片段。组件的实现方式有多种,以下是常见的几种方法。 单文件组件(SFC) 单文件组件以.vue为后缀,将…

react如何删除组件

react如何删除组件

删除 React 组件的几种方法 条件渲染法 通过状态控制组件是否渲染。当状态为 false 时,组件会被移除: const [showComponent, setShowComponent] =…

vue组件实现原理

vue组件实现原理

Vue 组件实现原理 Vue 组件的核心实现基于以下机制: 组件注册与模板解析 Vue 组件通过 Vue.component() 或单文件组件(.vue 文件)注册。模板会被编译成渲染函数,最终生成…

vue缩放组件实现

vue缩放组件实现

Vue 缩放组件实现方法 基于 CSS transform 实现缩放 通过 CSS 的 transform: scale() 属性实现基础缩放效果。在 Vue 中动态绑定 scale 值,结合鼠标事…

vue实现组件化

vue实现组件化

Vue 组件化实现方法 组件定义 使用 .vue 单文件组件格式,包含 <template>、<script> 和 <style> 三个部分: <templ…