Короче говоря, компонент более высокого порядка - это функция, которая принимает компонент и возвращает новый компонент, не более того.
Иногда вы можете захотеть расширить компонент, чтобы добавить больше функциональности, но не хотите добавлять непосредственно к нему по многим причинам. Давайте посмотрим на пример:
//HoC for check authentication import React, { Component } from 'react'; import { connect } from 'react-redux'; export default (ComposedComponent) => { class RequireAuth extends Component { componentWillMount() { if (!this.props.authenticated) this.props.history.replace("/"); } componentWillUpdate() { if (!this.props.authenticated) this.props.history.replace("/"); } render() { return ( <ComposedComponent { ...this.props } /> ) } } function mapStateToProps({ auth: { authenticated }}) { return { authenticated } } return connect(mapStateToProps)(RequireAuth); }
В этом примере мы создали функцию, которая принимает компонент в качестве аргумента и проверяет (через Redux), аутентифицирован ли пользователь, если не перенаправляет на «/».
В этом примере connect также является компонентом высокого порядка, который позволяет нашему компоненту получать доступ к хранилищам и создателям действий с помощью Redux.
Как видите, мы не добавляли новое поведение к исходному компоненту, но оно будет отображаться только в том случае, если пользователь аутентифицирован. Это один из способов защиты компонентов, к которым можно получить доступ только после входа пользователя в систему. Давайте посмотрим, как мы можем использовать этот HoC:
В приведенном выше примере компоненты Stores, StoreProducts, Cart и OrderList доступны только в том случае, если пользователь аутентифицирован.
Спасибо,