当前位置:首页 > React

react实现继承

2026-01-26 11:41:51React

在React中实现组件间的继承关系可以通过多种方式完成,但需要注意的是,React官方推荐组合(Composition)而非继承(Inheritance)来实现代码复用。以下是几种常见方法:

使用高阶组件(HOC)

高阶组件是React中复用组件逻辑的一种高级技巧,通过接受一个组件并返回一个新组件的方式实现逻辑复用。

function withLogging(WrappedComponent) {
  return class extends React.Component {
    componentDidMount() {
      console.log('Component is mounted');
    }

    render() {
      return <WrappedComponent {...this.props} />;
    }
  };
}

class MyComponent extends React.Component {
  render() {
    return <div>My Component</div>;
  }
}

export default withLogging(MyComponent);

使用Render Props

Render Props是一种通过prop传递渲染逻辑的技术,允许组件共享代码。

class MouseTracker extends React.Component {
  state = { x: 0, y: 0 };

  handleMouseMove = (event) => {
    this.setState({
      x: event.clientX,
      y: event.clientY
    });
  };

  render() {
    return (
      <div onMouseMove={this.handleMouseMove}>
        {this.props.render(this.state)}
      </div>
    );
  }
}

class App extends React.Component {
  render() {
    return (
      <MouseTracker render={({ x, y }) => (
        <h1>The mouse position is ({x}, {y})</h1>
      )} />
    );
  }
}

使用自定义Hooks

自定义Hooks是React 16.8引入的特性,允许在不编写组件的情况下复用状态逻辑。

function useWindowWidth() {
  const [width, setWidth] = React.useState(window.innerWidth);

  React.useEffect(() => {
    const handleResize = () => setWidth(window.innerWidth);
    window.addEventListener('resize', handleResize);
    return () => window.removeEventListener('resize', handleResize);
  }, []);

  return width;
}

function MyComponent() {
  const width = useWindowWidth();
  return <div>Window width: {width}</div>;
}

使用类继承(不推荐)

虽然可以使用ES6类继承,但React官方不推荐这种方式。

class BaseComponent extends React.Component {
  logMessage(message) {
    console.log(message);
  }
}

class MyComponent extends BaseComponent {
  render() {
    this.logMessage('Rendering MyComponent');
    return <div>My Component</div>;
  }
}

组合优于继承

React官方文档明确指出组合优于继承,建议通过props和组件组合来实现代码复用。

function Button(props) {
  return <button className="btn">{props.children}</button>;
}

function DangerButton(props) {
  return <Button className="btn-danger">{props.children}</Button>;
}

每种方法都有其适用场景,高阶组件和Render Props适用于复杂逻辑复用,自定义Hooks适用于状态逻辑复用,而组合是最简单直接的代码复用方式。

react实现继承

标签: react
分享给朋友:

相关文章

如何学react

如何学react

学习 React 的基础知识 React 是一个用于构建用户界面的 JavaScript 库。学习 React 的第一步是掌握其核心概念,包括组件、状态(State)、属性(Props)和生命周期方法…

react如何保养

react如何保养

保持组件简洁 将大型组件拆分为更小、更专注的组件,每个组件只负责单一功能。避免在单个组件中处理过多逻辑或状态,这有助于提高可维护性和可测试性。 合理使用状态管理 根据应用复杂度选择状态管理方案。简…

react如何取消渲染

react如何取消渲染

取消渲染的方法 在React中,取消渲染通常指的是在某些条件下阻止组件渲染或中断正在进行的渲染过程。以下是几种常见的方法: 条件渲染 通过条件判断决定是否渲染组件或部分内容。可以使用if语句或三元运…

react moment如何使用

react moment如何使用

安装 react-moment 通过 npm 或 yarn 安装 react-moment: npm install react-moment 或 yarn add react-moment…

如何下载react

如何下载react

下载 React 的方法 通过 npm 或 yarn 安装 React 可以通过包管理器 npm 或 yarn 安装。确保已安装 Node.js(包含 npm),然后在项目目录中运行以下命令:…

react如何运行

react如何运行

运行React项目的步骤 安装Node.js 确保系统已安装Node.js(建议版本12以上),可从官网下载并安装。Node.js自带npm包管理器,用于后续依赖安装。 创建React项目 使用官方…