Réagir à la compréhension des méthodes de cycle de vie

Je suis un débutant de React.js et je m'efforce de comprendre plusieurs méthodes pour réagir aux méthodes de cycle de vie.

Jusqu'à présent, j'ai encore quelque chose qui me confond:

1)

En ce qui concerne ma compréhension, la différence entre componentWillUpdate et componentWillReceiveProps est que componentWillReceiveProps s'appellera lorsque parent change les accessoires et nous pouvons utiliser setState (setState de cet enfant à l'intérieur de componentWillReceiveProps ).

Par exemple: https://github.com/bgerm/react-table-sorter-demo/blob/master/jsx/app.jsx

 var App = React.createClass({ getInitialState: function() { return {source: {limit: "200", source: "source1"}}; }, handleSourceChange: function(source) { this.setState({source: source}); }, render: function() { return ( <div> <DataSourceSelectors onSourceChange={this.handleSourceChange} source={this.state.source} /> <TableSorter dataSource={urlForDataSource(this.state.source)} config={CONFIG} headerRepeat="5" /> </div> ); } }); 

Dans TableSorter, nous avons

 componentWillReceiveProps: function(nextProps) { // Load new data when the dataSource property changes. if (nextProps.dataSource != this.props.dataSource) { this.loadData(nextProps.dataSource); } } 

C'est-à-dire quand on change this.state.source , on s'attend à ce que componentWillReceiveProps soit appelé dans TableSorter

Cependant, je ne comprends pas très bien comment utiliser componentWillUpdate dans ce cas, la définition de componentWillUpdate est

 componentWillUpdate(object nextProps, object nextState) 

Comment pouvons-nous passer le prochain État de parent en enfant? Ou peut-être que je me trompe, le prochain état est-il passé de l'élément parent?

2) méthode componentWillMount me confond parce que dans le document officiel, il dit que

Appelé une fois, sur le client et le serveur, immédiatement avant le début du rendu.

Dans ce cas, si j'utilise setState dans cette méthode, il remplacera GetInitialState puisqu'il sera appelé une seule fois sur initial. Dans ce cas, quelle est la raison pour définir les paramètres dans la méthode getInitialState. Dans ce cas particulier, nous avons

  getInitialState: function() { return { items: this.props.initialItems || [], sort: this.props.config.sort || { column: "", order: "" }, columns: this.props.config.columns }; }, componentWillMount: function() { this.loadData(this.props.dataSource); }, loadData: function(dataSource) { if (!dataSource) return; $.get(dataSource).done(function(data) { console.log("Received data"); this.setState({items: data}); }.bind(this)).fail(function(error, a, b) { console.log("Error loading JSON"); }); }, 

Les éléments seront débordés initialement et pourquoi nous avons encore besoin d' items: this.props.initialItems || [] items: this.props.initialItems || [] Int la méthode getInitialState?

J'espère que vous pouvez comprendre mon explication, et s'il vous plaît me donner quelques conseils si vous en avez. Merci beaucoup pour ça 🙂

1) componentWillReceiveProps est appelé avant componentWillUpdate dans le cycle de vie de la mise à jour de React. Vous avez raison que componentWillReceiveProps vous permet d'appeler setState . D'autre part, componentWillUpdate est un rappel à utiliser lorsque vous devez répondre à un changement d'état.

La différence fondamentale entre les accessoires et l'état est que l'état est privé pour le composant. C'est pourquoi ni un composant parent ni personne ne peut manipuler l'état (par exemple, call setState ) du composant. Ainsi, le flux de travail par défaut pour la relation de composant parent-enfant serait le suivant:

  • Parent passe de nouveaux accessoires à l'enfant
  • L'enfant gère de nouveaux accessoires dans 'componentWillReceiveProps', appelle setState si nécessaire
  • L'enfant gère un nouvel état dans 'componentWillUpdate' – mais si votre composant est stateful, la manipulation des accessoires dans 'componentWillReceiveProps' suffira.

2) Vous avez fourni un bon exemple de code pour illustrer la différence. Les valeurs par défaut définies dans getInitialState seront utilisées pour le rendu initial. L'appel loadData de componentWillMount lancera une requête AJAX qui peut ou non réussir – de plus, on ne sait pas combien de temps il faudra pour terminer. Au moment où la demande AJAX est terminée et que setState est appelé avec un nouvel état, le composant sera rendu dans les DOM avec des valeurs par défaut. C'est pourquoi il est tout à fait logique de fournir un état par défaut dans getInitialState .

Remarque: J'ai trouvé Comprendre l'article React Component Lifecycle une aide énorme pour comprendre les méthodes de cycle de vie de React.

Meilleur article J'ai toujours reed pour comprendre le cycle de vie du composant réactif:

Comprendre le cycle de vie du composant réactif