Proč setState není nastaven připojí svou řadu do státu?

hlasů
1

Musím vytvořit textové pole, které přijato více odkazů pak jsem split()do pole jo Jeho pořádku, ale chci nastavit toto pole do mého stateinu linkList: [], ale když kliknu na tlačítko pro podání mi dává prázdné pole, jak jsem inicializovat. ale když jsem znovu tlačítko, aby předložila pak mi dává moje požadovaný seznam, proč? Zde jsou kód a výstupy

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

Výstup na konzoli (First Click)

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

Výstup Console (Second Click)

youtube.com
google.com
facebook.com
--------------------------------------------- 
[youtube.com, google.com, facebook.com]
---------------------------------------------
[youtube.com, google.com, facebook.com]
Položena 13/01/2020 v 21:51
zdroj uživatelem
V jiných jazycích...                            


3 odpovědí

hlasů
0

Níže uvedený kód by mohl pomoci.

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();
      });
    });
  };
Odpovězeno 13/01/2020 v 21:54
zdroj uživatelem

hlasů
1

setStateje asynchronní. To znamená, že se tak nestane hned, ale je to velmi krátce nato místo. Přidáte-li:

console.log(linkList)

na vrcholu své metody render, uvidíte položky jsou připojeny tak, jak jste očekávali.

Odpovězeno 13/01/2020 v 21:54
zdroj uživatelem

hlasů
1

Pravděpodobně to je připojeno, je to prostě není k dispozici až příští render.

Z dokumentace :

setState()není vždy okamžitě aktualizovat komponentu. Může dávku nebo odložit aktualizaci až později. To dělá čtení this.stateihned po volání setState()potenciální úskalí . Místo toho, použití componentDidUpdatenebo setStatezpětné volání ( setState(updater, callback)), z nichž každá je zaručeno, že oheň po použití aktualizace.

Odpovězeno 13/01/2020 v 22:07
zdroj uživatelem

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