Hooks Partie 3— useState

Qu'y a-t-il derrière le légendaire Hooks? De temps en temps, je me demande.

À partir de la partie 1 , nous avons parcouru la Elementmise en œuvre pour expliquer le concept de conception général.

Une Elementclasse wrapper gère l'initialisation, la mise à jour et le démontage de Component.

À partir de la partie 2 , useEffectest examiné en détail sur toutes les utilisations. Dans cette partie 3, nous aimerions continuer et plonger dans useState.

function Component() {
  const [value, setValue] = useState(initialValue);
  ...
  return (<div />)
}

Évaluer

Le valuefourni peut être utilisé directement dans la Componentdéfinition. Et il peut être ensuite envoyé dans les composants enfants.

function Component() {
  const [value, setValue] = useState(initialValue)
  const onChange = e => {
    setValue(e.target.value)
  }
  return (
    <>
      value: {value}
      <input value={value} onChange={onChange} />
      <ChildComponent value={value} />
    </>
  )
}

const [value] = useState({ name, func, ...anything })

Remplacez la valeur par setValue, utilisez {} [] Object.assignpour vous assurer que vous remplacez un objet.

setValue(name)
// replace property name
setValue({ ...value, name })
// append to array
setValue([ ...values, { name })

Si la valeur doit être résolue avant d'être définie, vous pouvez la remplacer par une fonction.

const reducer = prev => prev + 1
setValue(reducer)

Une fois la nouvelle valeur définie, il demande la Elementmise à jour. Au cours du prochain cycle, ui reflétera ce changement.

—

Pour clarifier la conception ci-dessus, voici le code source de useState.

constructor(initialValue) {
  this.updater = this.updater.bind(this)
  // for initial function value, resolve it
  if(typeof initialValue === 'function') {
    initialValue = initialValue()
  }
  this.makeArgs(initialValue)
}
update() {
 return this.args
}
updater(value) {
  // for function value, resolve the value
  if (typeof value === "function") {
    const updaterFn = value
    const [previousValue] = this.args
    value = updaterFn(previousValue)
  }
  this.makeArgs(value)
  // request element update
  this.el.update()
}
makeArgs(value) {
  // allocate value and setValue
  this.args = Object.freeze([value, this.updater])
}

useStatealloue une valeur et permet à la valeur d'être à nouveau définie. Il permet également d'utiliser une fonction lors du réglage de la valeur.

Indice

  • Partie 1, élément
  • Partie 2, useEffet
  • Partie 3, useState <- VOUS ÊTES ICI
  • Partie 4, rendu

Suggested posts

Éviter les conséquences dévastatrices d'un accident vasculaire cérébral : apprendre du parcours d'une famille.

Éviter les conséquences dévastatrices d'un accident vasculaire cérébral : apprendre du parcours d'une famille.

Introduction Un accident vasculaire cérébral est une urgence médicale qui peut frapper n'importe qui à tout moment. Elle survient lorsque le flux sanguin vers une partie du cerveau est perturbé, entraînant une perte soudaine de la fonction cérébrale.

Jest - Un framework de test JavaScript puissant

Jest - Un framework de test JavaScript puissant

Les tests sont une partie essentielle du développement logiciel. Il garantit que le code est fiable, fonctionne comme prévu et réduit la probabilité d'erreurs.

Related posts

Le défi de lecture Goodreads est toxique

Le défi de lecture Goodreads est toxique

La démangeaison dans ma main s'est propagée alors que je négociais avec le libraire local pour un autre livre. Ce livre, comme les autres que j'ai achetés récemment, trouverait son trône sur ma pile «À lire» (TBR); et pourtant, je l'ai acheté.

Journal ouvert

Journal ouvert

Journal ouvert : une image par jour. J'ai toujours été fasciné par les histoires.

Qu'est-ce qui rend un podcast influent ?

Qu'est-ce qui rend un podcast influent&nbsp;?

La semaine dernière, j'ai remarqué un communiqué de presse, envoyé via PressGazette (un site Web d'information britannique). L'article annonçait qu'Acast, la société d'hébergement et de publicité de podcasts de Scandi, dirigerait un consortium d'éditeurs "probablement les plus influents" du podcasting.

Le meurtre de Jordan Neely et le problème du racisme « patriotique »

Les États-Unis peuvent-ils prendre la mesure essentielle de ne pas assimiler un comportement raciste au fait d'être un bon Américain ?

Le meurtre de Jordan Neely et le problème du racisme « patriotique »

[Alerte de déclenchement : cet essai comprend des captures d'écran de personnes faisant l'éloge du meurtrier de Jordan Neely.] Les responsables de l'application des lois ont finalement - et peut-être à contrecœur - inculpé Daniel Penny, l'homme qui a étouffé Jordan Neely jusqu'à sa mort, pour cet homicide.