Higher-Order Components - React
GitHub - deepsweet/hocs: Higher-Order Components for React
currying
function highOrderFunction(var1) {
return function returnFunction(var2) {
return var1 + var2;
}
}
const withSum1 = highOrderFunction(1);
const sumTotal = withSum1(2);
// 3
Debido a que los componentes son funciones podemos también aplicar este concepto
// Caso base
function Componente(props){
return <p>...</p>
}
function highOrderComponent() {
return function Componente(props) {
return <p>...</p>
}
}
function highOrderComponent(WrappedComponent) {
return function Componente(props) {
return (
<WrappedComponent
{...algoEspecial}
{...props}
/>
);
}
}
Ejemplos
function withApi(WrappedComponent) {
const apiData = fetchApi('<https://api.com>');
return function WrappedComponentWithApi(props) {
if (apidData.loading) return <p>Loading</p>;
return(
<WrapperdComponent data={apiData.json} />
);
}
}
function TodoBox(props) {
return (
<p>
Tu nombre es {props.data.name}
</p>
);
}
const TodoBoxWithApi = withApi(TodoBox);
function withApi(apiUrl){
return function withApiUrl(WrappedComponent) {
const apiData = fetchApi(apiUrl);
return function WrappedComponentWithApi(props) {
if (apidData.loading) return <p>Loading</p>;
return(
<WrapperdComponent data={apiData.json} />
);
}
}
}
function TodoBox(props) {
return (
<p>
Tu nombre es {props.data.name}
</p>
);
}
const TodoBoxWithApi = withApi('<https://api.com>')(TodoBox);