Waarom setstate niet ingesteld toevoegen van mijn reeks in staat?

stemmen
1

Ik moet een tekst gebied dat ik meerdere links genomen maak vervolgens split()in serie ja Het werkt prima, maar ik wil die array in mijn set statein linkList: [], maar als ik klik op de knop voor het indienen van het geeft me lege array als ik initialiseren. maar toen ik weer op de knop om te dienen dan het geeft me mijn gewenste lijst, waarom? Hier zijn code en voert

onSubmit = event => {
    this.setState({ loading: true, host: undefined });
    const { text, linkList } = this.state;

    console.log(text);
    const mList = text.split(\n).filter(String);
    console.log(mList);
    this.setState({
      linkList: [...mList]
    });
    console.log(linkList);

    event.preventDefault();
  };

Output console (First Click)

youtube.com
google.com
facebook.com
------------------------------------------------------------
[youtube.com, google.com, facebook.com]
------------------------------------------------------------
[]

Output Console (Tweede Click)

youtube.com
google.com
facebook.com
--------------------------------------------- 
[youtube.com, google.com, facebook.com]
---------------------------------------------
[youtube.com, google.com, facebook.com]
De vraag is gesteld op 13/01/2020 om 23:51
bron van user
In andere talen...                            


3 antwoorden

stemmen
0

De onderstaande code zou kunnen helpen.

onSubmit = event => {
    this.setState({ loading: true, host: undefined }, () => {
      const { text, linkList } = this.state;

      console.log(link);
      const mList = text.split("\n").filter(String);
      console.log(mList);
      this.setState({
        linkList: [...mList]
      }, () => {
        console.log(linkList);
        event.preventDefault();
      });
    });
  };
antwoordde op 13/01/2020 om 23:54
bron van user

stemmen
1

setStateasynchroon. Dat betekent dat het niet meteen gebeuren, maar een zeer korte tijd later plaats. Als u voeg een:

console.log(linkList)

aan de bovenkant van je maken methode, ziet u de items die worden toegevoegd net zoals je zou verwachten.

antwoordde op 13/01/2020 om 23:54
bron van user

stemmen
1

Waarschijnlijk wordt toegevoegd, het is gewoon niet beschikbaar tot de volgende te maken.

Uit de documentatie :

setState()niet altijd onmiddellijk het onderdeel bij te werken. Het kan batch of de update uit te stellen tot een later tijdstip. Dit maakt het lezen this.statedirect na het aanroepen van setState()een potentiële valkuil . Gebruik in plaats daarvan componentDidUpdateof een setStatecallback ( setState(updater, callback)), die beide zijn gegarandeerd om het vuur nadat de update is toegepast.

antwoordde op 14/01/2020 om 00:07
bron van user

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more