当前位置:首页 > 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:

react实现组件复用

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 传递渲染逻辑。例如:

react实现组件复用

<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 添加泛型类型支持:

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

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

相关文章

vue实现下拉刷新组件

vue实现下拉刷新组件

实现下拉刷新组件的核心思路 下拉刷新功能通常通过监听触摸事件、滚动位置和动画效果实现。Vue中可以利用自定义指令或封装组件完成,以下为两种常见实现方式。 基于自定义指令的实现 创建指令监听触摸事件,…

vue轮播组件实现

vue轮播组件实现

Vue 轮播组件实现方法 使用第三方库(如 Swiper) 安装 Swiper 库: npm install swiper 在 Vue 组件中引入 Swiper: <template…

vue实现折叠组件

vue实现折叠组件

实现折叠组件的基本思路 在Vue中实现折叠组件通常需要利用动态绑定和条件渲染。核心是通过控制一个布尔值状态来决定内容是否显示,并添加过渡动画提升用户体验。 基础实现方法 使用v-show或v-if控…

react组件如何通讯

react组件如何通讯

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

uniapp 分页组件

uniapp 分页组件

uniapp 分页组件实现方法 在uniapp中实现分页功能,可以通过自定义组件或使用第三方组件库完成。以下是几种常见实现方式: 自定义分页组件 创建一个名为uni-pagination的组件,模…

uniapp 滑动组件

uniapp 滑动组件

uniapp 滑动组件实现方法 使用swiper组件 uniapp内置的swiper组件可以实现滑动效果,适用于轮播图或页面切换场景。 示例代码: <swiper :indicator-…