événement de cycle de vie de l'état et prevState dans react.js
Ci-dessous est un simple compteur de réagir. Mais j'ai 3 de la confusion.
- Ce qui est de l'état dans la ligne 3? qui ressemble à une variable globale, il a du sens que si elle a
var
ouconst
avant. C'est qu'un cycle de vie en fonction de/var? - Dois-je importer les Composants de réagir? Je me souviens que je n'ai pas besoin de le faire dans v15.
- Où prevState venir?
import React, { Component } from 'react'; class Counter extends Component { state = { value: 0 }; increment = () => { this.setState(prevState => ({ value: prevState.value + 1 })); }; decrement = () => { this.setState(prevState => ({ value: prevState.value - 1 })); }; render() { return ( <div> {this.state.value} <button onClick={this.increment}>+</button> <button onClick={this.decrement}>-</button> </div> ) } }
OriginalL'auteur Maria Jane | 2016-10-01
Vous devez vous connecter pour publier un commentaire.
Voici une démo avec une commenté le code pour vous donner plus d'informations: http://codepen.io/PiotrBerebecki/pen/rrGWjm
1. Quel est l'état de la ligne 3? qui ressemble à une variable globale, il
de sens que si elle a var ou const devant elle. C'est que le cycle de vie
fonction/var?
state
dans la ligne 3 est juste une propriété du composant de Compteur. Une autre façon d'initialiser l'état de Réagir à l'aide de ES6 la syntaxe est comme suit:Réagir docs: https://facebook.github.io/react/docs/reusable-components.html#es6-classes
2. Dois-je importer les Composants de réagir? Je me souviens que j'
n'a pas besoin de le faire à la v15.
Alternativement, vous pouvez simplement importer de Réagir et de définir une classe de la manière suivante:
Ci-dessous vous permettent également d'utiliser les API du Composant:
3. D'où vient prevState venir?
La prevState vient de la setState api: https://facebook.github.io/react/docs/component-api.html#setstate
Vous verrez souvent les développeurs de la mise à jour de l'état de la manière suivante. C'est moins fiable que la méthode ci-dessus que l'état peut être mis à jour de manière asynchrone et nous ne devrions pas compter sur ses valeurs pour le calcul de l'état suivant.
Code complet de mon codepen:
const state = {'value':0}
Je viens d'ajouter la bonne façon d'initialiser l'état de ma réponse à la question 1.
J'ai vu que vous dites que l'auteur a fait de la mauvaise façon? ce que u veux dire par correctement? Je sais que la fixation d'un constructeur est la façon la plus commune de faire des trucs.
Quand j'ai dit correctement, je voulais dire "selon Réagir docs': facebook.github.io/réagir/docs/... qui disent "vous avez configuré votre propre propriété de l'etat dans le constructeur". J'ai juste ajouté ceci à la réponse.
Si elle fonctionne également si vous définissez l'état initial comme une propriété dans le corps de la classe (au moins dans certains de code que j'ai fait à l'aide de "Créer Réagir App" cli), mais probablement à cause de certains ES6+ fonctionnalités comme trouvé dans ([babeljs.io/blog/2015/06/07/réagir-sur-es6-plus]https://babeljs.io/...)
OriginalL'auteur Piotr Berebecki
Il y a certaines caractéristiques de votre code qui sont liés à l'ES6 (ES2015) version, c'est pourquoi vous pourriez être confus:
Comme il est à l'intérieur d'un
class
corps, ce n'est pas une variable globale. Dans ce casstate
est une propriété qui sera réglé pour les instances deCounter
, donc vous pouvez y accéder que parthis.state
.Lors de la création d'un composant à l'aide d'une classe, vous devez étendre le
Component
classe, donc dans ce cas: oui, vous avez besoin d'importer desComponent
ou vous pourriez avoir utiliséclass Counter extends React.Component
.Encore une fois, un ES6 fonctionnalité. Ce qui est passé à la
this.setState()
méthode est un fonction. Il pourrait être source de confusion parce que c'est un flèche fonction=>
. DoncpreviousState
est en fait un paramètre de cette fonction. Pour vous aider à voir l'image, le code ci-dessus est similaire:Il y a quelques différences entre "normal" et une flèche fonctions, si, si, je vous suggère de rechercher l'ES6, en vue d'être plus familier avec elle.
const variableName = {propsName:'something}
OriginalL'auteur Diego Cardoso