En React, un 'Componente de Orden Superior' (HOC) es esencialmente un patrón avanzado de React, que se utiliza para reutilizar la lógica de los componentes. Para entenderlo de manera más simple, un HOC es una función que toma un componente y retorna un nuevo componente.
El propósito principal de este patrón es compartir la funcionalidad común entre componentes de React sin repetir el código. De hecho, un HOC envuelve el componente original y puede proporcionar más props, gestión de estado y renderizado condicional, todo mientras mantiene el principio de un solo propósito de los componentes.
Vamos a ver un ejemplo para entenderlo mejor:
function withSubscription(WrappedComponent, selectData) {
return class extends React.Component {
constructor(props) {
super(props);
this.handleChange = this.handleChange.bind(this);
this.state = {
data: selectData(DataStore, props)
};
}
componentDidMount() {
DataStore.subscribe(this.handleChange);
}
handleChange() {
this.setState({
data: selectData(DataStore, this.props)
});
}
render() {
return <WrappedComponent data={this.state.data} {...this.props} />;
}
};
}
En este ejemplo, withSubscription
es un HOC que se suscribe a los cambios en un DataStore. Este HOC debe decorar o envolver cualquier componente que necesite estar al tanto de esos cambios. Proporciona data
como un prop al componente envuelto (WrappedComponent
) y se encarga de la suscripción y la eliminación de la suscripción a los cambios del DataStore cuando los componentes se montan y desmontan.
Aunque los HOC son una herramienta poderosa, es importante tener en cuenta ciertos puntos al utilizarlos.
Primero, no hay que modificar el componente original. Los HOC deben usar la composición, es decir, deben envolver el componente original sin modificarlo.
Segundo, se debe pasar todos los props al componente envuelto. Esto es para garantizar que el componente envuelto tenga acceso a los props que necesita.
Y por último, es una buena práctica asegurarse de que el HOC tenga un nombre descriptivo, para ayudar en la depuración y rendimiento.
En resumen, los Componentes de Orden Superior en React proporcionan una forma eficaz de reutilizar la lógica del componente, manteniendo el principio de un solo propósito en la organización del código.