ReactNative(React) 高阶组件(HOC)从小白到大师,只需要看这一篇就足够了

“为什么我的代码总是重复又重复?” —— 当我在第10次复制粘贴相同的权限检查逻辑时,终于崩溃了。直到发现高阶组件这个"代码复印机杀手",才明白React的组件复用可以如此优雅!本文将带你从零开始,逐步掌握高阶组件的各种骚操作,让你的代码从"复制粘贴地狱"升级到"优雅复用天堂"!

一、高阶组件基础:什么是HOC?

1.1 通俗理解高阶组件

高阶组件(Higher-Order Component)就像组件界的"套娃大师"

  • 输入:一个普通组件
  • 输出:一个增强版的新组件
  • 原理:不修改原组件,而是通过包装来扩展功能

1.2 与普通组件的区别

特性 普通组件 高阶组件
输入 props 组件
输出 JSX 新组件
作用 渲染UI 增强功能

1.3 第一个HOC示例:给组件加边框

const withBorder = (WrappedComponent) => {
  return (props) => (
    <View style={
  
  {borderWidth: 1, borderColor: 'red', padding: 10}}>
      <WrappedComponent {...props} />
    </View>
  );
};

// 使用
const FancyButton = withBorder(Button);

二、HOC核心技巧:5种实用模式

2.1 属性代理模式

const withLogger = (WrappedComponent) => {
  return (props) => {
    console.log(`渲染组件: ${WrappedComponent.name}`);
    return <WrappedComponent {...props} />;
  };
};

适用场景:日志记录、属性校验、属性操作

2.2 状态抽象模式

const withLoading = (WrappedComponent) => {
  return class extends React.Component {
    state = { isLoading: true };
    
    componentDidMount() {
      setTimeout(() => this.setState({ isLoading: false }), 1000);
    }
    
    render() {
      return this.state.isLoading ? 
        <ActivityIndicator /> : 
        <WrappedComponent {...this.props} />;
    }
  };
};

适用场景:加载状态、错误处理、数据获取

2.3 反向继承模式

const withAuth = (WrappedComponent) => {
  return class extends WrappedComponent {
    render() {
      if (!this.props.isAuthenticated) {
        return <LoginScreen />;
      }
      return super.render();
    }
  };
};

适用场景:条件渲染、覆盖生命周期

2.4 组合多个HOC

const EnhancedComponent = withRouter(
  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

老猿阿浪

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值