La méthode ReactJS lifecycle à l'intérieur d'un composant fonctionnel

au lieu d'écrire mes composants dans une classe, puisqu'ils sont muets. Je les écris surtout dans une fonction. Mais comment outrepasser componentDidMount, componentWillMount à l'intérieur des composants fonctionnels? Est-il 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>  
    )
}
21
demandé sur Aftab Naveed 2017-06-12 21:20:04

3 réponses

Vous pouvez utiliser réagissent-pure-cycle de vie ajouter des fonctions de cycle de vie aux composants fonctionnels.

Exemple:

import React, { Component } from 'react';
import lifecycle from 'react-pure-lifecycle';

const methods = {
  componentDidMount(props) {
    console.log('I mounted! Here are my props: ', props);
  }
};

const Channels = props => (
<h1>Hello</h1>
)

export default lifecycle(methods)(Channels);
19
répondu Yohann 2018-07-06 03:57:08

la propriété des composants fonctionnels est qu'ils n'ont pas accès aux fonctions de réaction du cycle de vie ou aux this mot clé. Vous avez besoin d'étendre l' React.Component class si vous voulez utiliser la fonction lifecycle.

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 quand vous voulez seulement rendre votre composant sans avoir besoin de plus de logique.

12
répondu Shubham Khatri 2017-12-13 13:02:06

si vous avez besoin D'utiliser React LifeCycle, vous avez besoin de use Class.

Exemple:

import React, { Component } from 'react';

class Grid extends Component {

 constructor(props){
  super(props)
 }

 componentDidMount () { /* do something */ }

 render () { 
   return <h1>Hello</h1>
 }

}
4
répondu Gabriel Ferreira 2017-06-12 18:24:48