Editar: Avec l'introduction de Hooks
il est possible d'implémenter un comportement de type cycle de vie ainsi que l'état dans les composants fonctionnels. Actuellement,
Les crochets sont une nouvelle proposition de fonctionnalité qui vous permet d'utiliser l'état et d'autres fonctions de React sans écrire de classe. Ils sont publiés dans React comme une partie de v16.8.0
useEffect
peut être utilisé pour répliquer le comportement du cycle de vie. useState
peut être utilisé pour stocker l'état dans un composant de fonction.
Syntaxe de base :
useEffect(callbackFunction, [dependentProps]) => cleanupFunction
Vous pouvez mettre en œuvre votre cas d'utilisation dans des crochets tels que
const grid = (props) => {
console.log(props);
let {skuRules} = props;
useEffect(() => {
if(!props.fetched) {
props.fetchRules();
}
console.log('mount it!');
}, []); // passing an empty array as second argument triggers the callback in useEffect only after the initial render thus replicating `componentDidMount` lifecycle behaviour
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>
)
}
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 auditeurs, en reproduisant le comportement de la fonction componentWillUnmount
:
Ex : componentWillUnmount
useEffect(() => {
window.addEventListener('unhandledRejection', handler);
return () => {
window.removeEventListener('unhandledRejection', handler);
}
}, [])
Pour faire useEffect
conditionnel à des événements spécifiques, vous pouvez lui fournir un tableau de valeurs pour vérifier les changements :
Ex : componentDidUpdate
componentDidUpdate(prevProps, prevState) {
const { counter } = this.props;
if (this.props.counter !== prevState.counter) {
// some action here
}
}
Crochets équivalents
useEffect(() => {
// action here
}, [props.counter]); // checks for changes in the values in this array
Si vous incluez ce tableau, assurez-vous d'inclure toutes les valeurs de la portée du composant qui changent dans le temps (props, état), ou vous pourriez vous retrouver à référencer des valeurs de rendus précédents.
Il y a quelques subtilités à utiliser useEffect
; consultez l'API Here
.
Avant la v16.7.0
La propriété des composants fonctionnels est qu'ils n'ont pas accès aux fonctions du cycle de vie de Reacts ou à l'outil de gestion du cycle de vie. this
mot-clé. Vous devez étendre le React.Component
si vous souhaitez utiliser la fonction de cycle de vie.
class Grid extends React.Component {
constructor(props) {
super(props)
}
componentDidMount () {
if(!this.props.fetched) {
this.props.fetchRules();
}
console.log('mount it!');
}
render() {
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>
)
}
}
Les composants fonctionnels sont utiles lorsque vous souhaitez uniquement assurer le rendu de votre composant sans avoir besoin d'une logique supplémentaire.
3 votes
Les composants fonctionnels ne sont pas censés avoir des méthodes de cycle de vie. parce qu'ils sont juste des fonctions. et les fonctions n'ont pas de méthodes. il y a des classes pour cela