React
Onderdelen van hogere orde
Zoeken…
Invoering
Higher Order Components (in het kort "HOC") is een ontwerppatroon voor reacttoepassingen dat wordt gebruikt om componenten te verbeteren met herbruikbare code. Ze maken het mogelijk om functionaliteit en gedrag aan bestaande componentklassen toe te voegen.
Een HOC is een pure JavaScript-functie die een component accepteert als argument en een nieuwe component retourneert met de uitgebreide functionaliteit.
Opmerkingen
HOC's worden vrij vaak gebruikt in bibliotheken van derden. Zoals de Redux connect- functie.
Eenvoudig onderdeel met hogere order
Laten we zeggen dat we console.log willen telkens wanneer de component wordt geactiveerd:
hocLogger.js
export default function hocLogger(Component) {
return class extends React.Component {
componentDidMount() {
console.log('Hey, we are mounted!');
}
render() {
return <Component {...this.props} />;
}
}
}
Gebruik deze HOC in uw code:
MyLoggedComponent.js
import React from "react";
import {hocLogger} from "./hocLogger";
export class MyLoggedComponent extends React.Component {
render() {
return (
<div>
This component get's logged to console on each mount.
</div>
);
}
}
// Now wrap MyLoggedComponent with the hocLogger function
export default hocLogger(MyLoggedComponent);
Hogere bestelcomponent die controleert op authenticatie
Stel dat we een component hebben die alleen moet worden weergegeven als de gebruiker is aangemeld.
Dus maken we een HOC die controleert op de authenticatie bij elke render ():
AuthenticatedComponent.js
import React from "react";
export function requireAuthentication(Component) {
return class AuthenticatedComponent extends React.Component {
/**
* Check if the user is authenticated, this.props.isAuthenticated
* has to be set from your application logic (or use react-redux to retrieve it from global state).
*/
isAuthenticated() {
return this.props.isAuthenticated;
}
/**
* Render
*/
render() {
const loginErrorMessage = (
<div>
Please <a href="/login">login</a> in order to view this part of the application.
</div>
);
return (
<div>
{ this.isAuthenticated === true ? <Component {...this.props} /> : loginErrorMessage }
</div>
);
}
};
}
export default requireAuthentication;
We gebruiken dan gewoon deze component voor hogere bestellingen in onze componenten die voor anonieme gebruikers moeten worden verborgen:
MyPrivateComponent.js
import React from "react";
import {requireAuthentication} from "./AuthenticatedComponent";
export class MyPrivateComponent extends React.Component {
/**
* Render
*/
render() {
return (
<div>
My secret search, that is only viewable by authenticated users.
</div>
);
}
}
// Now wrap MyPrivateComponent with the requireAuthentication function
export default requireAuthentication(MyPrivateComponent);
Dit voorbeeld wordt hier gedetailleerder beschreven.