ホームページ  >  記事  >  ウェブフロントエンド  >  React での高次コンポーネントの使用例

React での高次コンポーネントの使用例

不言
不言転載
2018-11-15 17:23:492199ブラウズ

この記事の内容は、React の高レベルのコンポーネントの使用例に関するものです。必要な方は参考にしていただければ幸いです。

高次コンポーネント

  • HOC は React の標準 API ではありません。

  • HOC は関数です。

  • HOC は Component を返します。

例:

const EnhancedComponent = higherOrderComponent(WrappedComponent);

使用シナリオ

コードの再利用

React バージョン 0.15 より前の mixin と同様です。

HOC は、複数のコンポーネントが 1 つのコードまたは同じメソッドを使用する場合に使用できます。

例:

import React, { PureComponent } from 'react';

const Common = (WrapComponent) => {
  return (
    <div>
      <h1>Title</h1>
      <WrapComponent />
    </div>
  );
};

const Header = () => <div>Header</div>;
const Footer = () => <div>Footer</div>;

export default class extends PureComponent {
  render() {
    return (
      <div>
        <div>
          <p>Header Component</p>
          {Common(Header)}
        </div>
        <hr />
        <div>
          <p>Footer Component</p>
          {Common(Footer)}
        </div>
      </div>
    );
  }
}

オンラインの例

抽象状態と変更プロパティ

は次のようにラップできます。 WrappedComponent コンポーネントのパブリック状態は抽象化されています。

WrappedComponent でラップされたコンポーネントを通じて、変更や追加などの props を渡すことができます。

例:

const HOComp = (WrappedComponent) => {
  return class extends React.Component {
    constructor(props) {
      super(props);
      this.state = {name: ''};
    }

    componentDidMount() {
      this.setState({name: WrappedComponent.displayName || WrappedComponent.name || 'Component';});
    }

    return <WrappedComponent name={this.state.name} {...this.props}/>
  }
}

Xuanran ハイジャック

条件付き Xuanran。小道具または状態条件に基づいて Xuanran のコンテンツを返します。

例:

const HOComp = (WrappedComponent) => {
  return class Enhancer extends WrappedComponent {
    render() {
      if (this.props.loggedIn) {
        return super.render()
      } else {
        return null
      }
    }
  }
}

逆継承

返された上位コンポーネント クラス (Enhancer) は、WrappedComponent を継承します。

例:

const EnchanceComponent = (WrappedCompopnent) => {
  return class extends WrappedCompopnent {
    constructor(props) {
      super(props);
      this.state = { error: '' };
    }
    componentDidMount() {
      /*do something*/
      super.componentDidMount();
    }
    render() {
      if (this.state.error) {
        return <p>{this.state.error}</p>;
      } else {
        return super.render();
      }
    }
  }
};

オンライン例

以上がReact での高次コンポーネントの使用例の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はsegmentfault.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。