Hvorfor setState ikke satt føye mitt utvalg i staten?

stemmer
1

Jeg må lage et tekstområde som tatt flere linker så jeg split()inn i matrisen ja det fungerer fint, men jeg ønsker å sette denne matrisen inn i min statei linkList: [], men når jeg klikker på knappen for å sende det gir meg tom matrise som jeg initialisere. men når jeg igjen trykker på send-knappen da det gir meg min ønsket liste, hvorfor? her er kode og utganger

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();
  };

Utgang konsoll (First Click)

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

Utgang Console (Second Click)

youtube.com
google.com
facebook.com
--------------------------------------------- 
[youtube.com, google.com, facebook.com]
---------------------------------------------
[youtube.com, google.com, facebook.com]
Publisert på 13/01/2020 klokken 23:51
kilden bruker
På andre språk...                            


3 svar

stemmer
0

Koden nedenfor kan hjelpe.

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();
      });
    });
  };
Svarte 13/01/2020 kl. 23:54
kilden bruker

stemmer
1

setStateer asynkron. Det betyr at det ikke skjer med en gang, men en svært kort tid senere i stedet. Hvis du legger til en:

console.log(linkList)

til toppen av din gjengi metoden, vil du se elementer som blir lagt akkurat som du forventer.

Svarte 13/01/2020 kl. 23:54
kilden bruker

stemmer
1

Det sannsynligvis blir lagt, det er bare ikke tilgjengelig før neste gjengi.

Fra dokumentasjon :

setState()ikke alltid umiddelbart oppdatere komponenten. Det kan batch eller utsette oppdateringen før senere. Dette gjør lesing this.staterett etter ringer setState()en potensiell fallgruve . I stedet, bruk componentDidUpdateeller en setStatetilbakeringing ( setState(updater, callback)), som begge er garantert å brann etter at oppdateringen er installert.

Svarte 14/01/2020 kl. 00:07
kilden bruker

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