Miért setState nincs megadva hozzáfűzve én tömb állam?

szavazat
1

Meg kell hozzon létre egy szöveges terület, amely figyelembe több link aztán split()a tömb Ja, hogy jól működik, de azt szeretnénk beállítani, hogy a tömb én stateitt linkList: [], de amikor rákattintok a gombra benyújtási ez ad nekem üres tömböt, mint én inicializálni. de amikor ismét nyomja meg a küldés gombot, majd ad nekem kívánt listát, hogy miért? itt kódot és kimenetek

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

Nyomtató konzol (első kattintás)

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

Nyomtató konzol (második Click)

youtube.com
google.com
facebook.com
--------------------------------------------- 
[youtube.com, google.com, facebook.com]
---------------------------------------------
[youtube.com, google.com, facebook.com]
A kérdést 13/01/2020 21:51
a forrás felhasználó
Más nyelveken...                            


3 válasz

szavazat
0

Az alábbi kódot segíthet.

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();
      });
    });
  };
Válaszolt 13/01/2020 21:54
a forrás felhasználó

szavazat
1

setStateaszinkron. Ez azt jelenti, hogy nem történik meg azonnal, hanem egy nagyon rövid idő múlva helyett. Ha hozzá:

console.log(linkList)

A tetején a render módszer, látni fogja a cikkek csatolt ahogy várnánk.

Válaszolt 13/01/2020 21:54
a forrás felhasználó

szavazat
1

Valószínűleg van csatolt, csak nem áll rendelkezésre, amíg a következő render.

A dokumentáció :

setState()nem mindig azonnal frissíteni az alkatrész. Ez lehet szakaszos vagy elhalasztja a frissítést csak később. Ez teszi olvasás this.stateután hívja setState()a potenciális buktató . Ehelyett a componentDidUpdatevagy a setStatevisszahívás ( setState(updater, callback)), amelyek közül bármelyik garantáltan tűz a frissítés után került sor.

Válaszolt 13/01/2020 22:07
a forrás felhasználó

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