HOCとは、React における概念で、higher-order componentの略です。 今ではかなり古い概念になってしまいましたが、もしかすると今後役立つかもしれないので、撮っておきます。
機能的に説明すると、コンポーネントを引数にとって、新たなコンポーネントを返す関数のことを指します。
これを使えば、既存のコンポーネントを変更せずに機能を追加できます。
HOCの実装例
単純なHOCの実装例を紹介いたします。
エナジードリンクを人間に与えて元気づける。ということをモデルに説明します。
withEnergyDrink関数
人間のコンポーネントを受け取って、エナジードリンクで活力を与え、再度人間を返す関数です。
内部では、渡されたコンポーネントのvitalizedプロパティをtrueにしたうえで返しています。
import React, { Component } from "react";
const withEnergyDrink = Person => class extends Component {
render() {
return <Person vitalized={true} {...this.props} />;
}
}
export default withEnergyDrink;
Personコンポーネント
人間は、活力が与えられないと元気がでないものです。
Personコンポーネントは、vitalizedプロパティがtrueの場合はVitalized!と、そうでない場合はNot vitalized…と出力します。
import React from "react";
const Person = ({vitalized}) => {
return vitalized
? <span>I'm Vitalized!</span>
: <span>I'm not vitalized...</span>;
}
export default Person;
Appコンポーネント
withEnergyDrinkによってエナジードリンクを与えられた人間と、そうでない人間の違いを表示します。
1度withEnergyDrinkに渡したPersonWithEnergyDrinkコンポーネントは、元気いっぱいです。
そうでないPersonコンポーネントはあまり元気がありません。
import React, { Component } from 'react';
import Person from "./Person";
import withEnergyDrink from "./withEnergyDrink";
const PersonWithEnergyDrink = withEnergyDrink(Person);
class App extends Component {
render() {
return (
<div>
a person with energy drink: <PersonWithEnergyDrink />
<br />
a person without energy drink: <Person />
</div>
);
}
}
export default App;
まとめ
みなさんも、元気を出したい時には栄養ドリンクを摂取しましょう。