当前位置:首页 > 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 native如何启动

react native如何启动

如何启动 React Native 项目 安装 Node.js 和 npm 确保已安装 Node.js(建议版本 16 或更高)和 npm(Node.js 自带)。可通过以下命令检查版本: nod…

react如何取消渲染

react如何取消渲染

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

电脑如何安装react

电脑如何安装react

安装 Node.js 和 npm React 依赖于 Node.js 和 npm(Node Package Manager)。从 Node.js 官网下载并安装最新稳定版本,安装完成后会自动包含 np…

react 如何引入jquery

react 如何引入jquery

引入 jQuery 到 React 项目 在 React 项目中引入 jQuery 可以通过多种方式实现,但需要注意 React 和 jQuery 操作 DOM 的方式可能冲突,因此建议仅在必要时使用…

react moment如何使用

react moment如何使用

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

如何手写一个react

如何手写一个react

手写一个简单的 React 创建一个基础的 React 实现需要理解其核心概念:虚拟 DOM、组件、状态管理和渲染。以下是一个简化版的 React 实现。 创建虚拟 DOM 虚拟 DOM 是真实 D…