Neden duruma benim dizi ekleme ayarlanmamış setState?

oy
1

Sonra ben birden çok bağlantı alınan bir metin alanı oluşturmak zorunda split()dizide evet Onun çalışma ince içine, ama benim içine diziyi ayarlamak istediğiniz statein linkList: []ama gönderdiğiniz için düğmeye tıkladığınızda bana başlatmak boş diziyi verir. Tekrar düğmeye göndermek bastığınızda ama sonra benim istenen liste verir, neden? Burada kod ve çıkışlar vardır

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

Çıktı konsolu (İlk Tıklama)

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

Çıktı Konsolu (İkinci tıklayın)

youtube.com
google.com
facebook.com
--------------------------------------------- 
[youtube.com, google.com, facebook.com]
---------------------------------------------
[youtube.com, google.com, facebook.com]
Oluştur 13/01/2020 saat 23:51
kaynak kullanıcı
Diğer dillerde...                            


3 cevaplar

oy
0

Aşağıdaki kod kudreti yardımı.

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();
      });
    });
  };
Cevap 13/01/2020 saat 23:54
kaynak kullanıcı

oy
1

setStateeşzamansızdır. Bunun anlamı çok kısa bir süre sonra yerine hemen gerçekleşir, ama değil. Eğer bir eklerseniz:

console.log(linkList)

senin hale yöntemin üstüne, öğelerin beklediğiniz gibi ekleniyor göreceksiniz.

Cevap 13/01/2020 saat 23:54
kaynak kullanıcı

oy
1

Muhtemelen bir sonraki işlemek kadar sadece müsait değil, ekleniyor.

Gönderen belgeler :

setState()Her zaman hemen bileşeni güncellemiyor. Bu toplu olabilir veya sonrasına kadar güncelleştirmeyi ertelemek. Bu okuma yapar this.stateçağrıldıktan sonra hakkını setState()potansiyel bir hatadır . Bunun yerine, kullanımı componentDidUpdateya da bir setStategeri arama ( setState(updater, callback)güncelleme uygulandıktan sonra), bunların her ikisi yangın garanti edilir.

Cevap 14/01/2020 saat 00:07
kaynak kullanıcı

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