Au lieu d'écrire mes composants dans une classe, j'aimerais utiliser la syntaxe de la fonction à la place.
Comment remplacer componentDidMount
, à l' componentWillMount
intérieur des composants de fonction?
Est-ce même possible?
const grid = (props) => {
console.log(props);
let {skuRules} = props;
const componentDidMount = () => {
if(!props.fetched) {
props.fetchRules();
}
console.log('mount it!');
};
return(
<Content title="Promotions" breadcrumbs={breadcrumbs} fetched={skuRules.fetched}>
<Box title="Sku Promotion">
<ActionButtons buttons={actionButtons} />
<SkuRuleGrid
data={skuRules.payload}
fetch={props.fetchSkuRules}
/>
</Box>
</Content>
)
}
Réponses:
Edit: Avec l'introduction de,
Hooks
il est possible d'implémenter un type de comportement de cycle de vie ainsi que l'état dans les composants fonctionnels. ActuellementuseEffect
hook peut être utilisé pour répliquer le comportement du cycle de vie etuseState
peut être utilisé pour stocker l'état dans un composant de fonction.Syntaxe de base:
Vous pouvez implémenter votre cas d'utilisation dans des crochets comme
useEffect
peut également renvoyer une fonction qui sera exécutée lorsque le composant sera démonté. Cela peut être utilisé pour se désabonner des écouteurs, reproduisant le comportement decomponentWillUnmount
:Par exemple: componentWillUnmount
Pour rendre
useEffect
conditionnel à des événements spécifiques, vous pouvez lui fournir un tableau de valeurs pour vérifier les modifications:Par exemple: componentDidUpdate
Crochets équivalents
Si vous incluez ce tableau, assurez-vous d'inclure toutes les valeurs de la portée du composant qui changent au fil du temps (accessoires, état), sinon vous risquez de finir par référencer les valeurs des rendus précédents.
Il y a quelques subtilités à utiliser
useEffect
; consultez l'APIHere
.Avant la v16.7.0
La propriété des composants de fonction est qu'ils n'ont pas accès aux fonctions de cycle de vie Reacts ou au
this
mot - clé. Vous devez étendre laReact.Component
classe si vous souhaitez utiliser la fonction de cycle de vie.Les composants de fonction sont utiles lorsque vous souhaitez uniquement rendre votre composant sans avoir besoin de logique supplémentaire.
la source
useEffect(() => { // action here }, [props.counter])
est déclenché lors du rendu initial, contrairement à componentDidUpdate.passing an empty array as second argument triggers the callback in useEffect only after the initial render
cela ressemble à une mauvaise façon de construire des trucs: / espérons que l'équipe de réaction proposera quelque chose de mieux dans les versions futures.Vous pouvez utiliser react-pure-lifecycle pour ajouter des fonctions de cycle de vie aux composants fonctionnels.
Exemple:
la source
Grid
? Je ne le vois défini nulle part dans votre extrait de code? Si vous vouliez également utiliser redux avec cela, pourriez-vous vous en tirer avec quelque chose commeexport default lifecycle(methods)(connect({},{})(ComponentName))
?Première solution: vous pouvez utiliser la nouvelle API react HOOKS. Actuellement dans React v16.8.0
Les hooks vous permettent d'utiliser plus de fonctionnalités de React sans classes. Les hooks fournissent une API plus directe aux concepts React que vous connaissez déjà: accessoires, état, contexte, références et cycle de vie . Hooks résout tous les problèmes résolus avec Recompose.
Une note de l'auteur de
recompose
(acdlite, 25 octobre 2018):Solution deux:
Si vous utilisez la version react qui ne prend pas en charge les hooks, pas de soucis, utilisez
recompose
plutôt (Une ceinture utilitaire React pour les composants fonctionnels et les composants d'ordre supérieur.). Vous pouvez utiliserrecompose
pour attacherlifecycle hooks, state, handlers etc
à un composant de fonction.Voici un composant sans rendu qui attache des méthodes de cycle de vie via le HOC de cycle de vie (à partir de recomposer).
la source
Vous pouvez créer vos propres méthodes de cycle de vie.
Fonctions utilitaires
Usage
la source
Selon la documentation:
voir la documentation React
la source
Si vous avez besoin d'utiliser React LifeCycle, vous devez utiliser Class.
Échantillon:
la source
Vous pouvez utiliser le module create-react-class. Documentation officielle
Bien sûr, vous devez d'abord l'installer
Voici un exemple de travail
la source
si vous utilisez react 16.8, vous pouvez utiliser les hooks react ... Les hooks React sont des fonctions qui vous permettent de «vous connecter» à l'état React et aux fonctionnalités du cycle de vie des composants de fonction ... docs
la source