私は、より詳細な答えを提供する注意ここに
ランタイムラッパー:
これは最も慣用的な方法です。
const Wrapper = ({children}) => (
<div>
<div>header</div>
<div>{children}</div>
<div>footer</div>
</div>
);
const App = () => <div>Hello</div>;
const WrappedApp = () => (
<Wrapper>
<App/>
</Wrapper>
);
注children
「特別な小道具」リアクトに、上記の例では、糖衣構文であるとする(ほとんど)と等価です<Wrapper children={<App/>}/>
初期化ラッパー/ HOC
高次コンポーネント(HOC)を使用できます。最近、公式ドキュメントに追加されました。
// Signature may look fancy but it's just
// a function that takes a component and returns a new component
const wrapHOC = (WrappedComponent) => (props) => (
<div>
<div>header</div>
<div><WrappedComponent {...props}/></div>
<div>footer</div>
</div>
)
const App = () => <div>Hello</div>;
const WrappedApp = wrapHOC(App);
これにより、ラッパーコンポーネントがshouldComponentUpdateを使用してレンダリングを1ステップ先に短絡できるため、パフォーマンスが(少し)向上する可能性がありますが、ランタイムラッパーの場合、子プロップは常に異なるReactElementであり、再レンダリングを引き起こす可能性があります。コンポーネントがPureComponentを拡張する場合でも。
ことに注意してくださいconnect
再来の実行時のラッパーにするために使用が、それはあなたが使用している場合は役に立たないレンダリングし再避けるためにできるので、HOCに変更されましたpure
(デフォルトでtrueである)オプションを
Reactコンポーネントの作成はコストがかかる可能性があるため、レンダリングフェーズ中にHOCを呼び出さないでください。初期化時にこれらのラッパーを呼び出す必要があります。
上記のような機能コンポーネントを使用する場合、ステートレス機能コンポーネントは実装されないため、HOCバージョンは有用な最適化を提供しないことに注意してください shouldComponentUpdate
ここでの詳細な説明:https : //stackoverflow.com/a/31564812/82609
this.props.children
はコンポーネントAPIの一部であり、この方法で使用することが想定されています。Reactチームの例では、小道具の転送や一人の子供について話すときなどに、この手法を使用しています。