Mengapakah Fungsi `this.setState` React Tidak Tersedia dalam Panggilan Balik ComponentDidMount?

Linda Hamilton
Lepaskan: 2024-10-23 17:04:02
asal
337 orang telah melayarinya

Why is React's `this.setState` Function Unavailable in ComponentDidMount Callback?

"React this.setState is not a function" Isu: Pengikatan Kontekstual

Apabila cuba membangunkan aplikasi menggunakan API pihak ketiga , ralat biasa yang dihadapi ialah "TypeError: this.setState bukan fungsi." Ini timbul apabila cuba mengendalikan respons API. Masalahnya biasanya berpunca daripada pengikatan yang tidak betul.

Kod React yang disediakan mentakrifkan komponen yang dipanggil AppMain dengan kaedah componentDidMount. Dalam kaedah ini, panggilan API VK dibuat untuk mendapatkan maklumat pengguna. Dalam fungsi panggil balik respons API, percubaan dibuat untuk menggunakan this.setState untuk mengemas kini keadaan komponen. Walau bagaimanapun, ralat berlaku kerana fungsi panggil balik dilaksanakan dalam konteks yang berbeza dan tidak mempunyai akses kepada ini.setState.

Penyelesaian:

Untuk menyelesaikan isu ini, fungsi panggil balik mesti terikat pada konteks yang betul. Ini boleh dicapai dengan menggunakan kaedah .bind:

VK.api('users.get', { fields: 'photo_50' }, function(data) {
  if (data.response) {
    this.setState({ // the error happens here
      FirstName: data.response[0].first_name
    });
    console.info(this.state.FirstName);
  }
}.bind(this));
Salin selepas log masuk

Dengan mengikat fungsi panggil balik pada contoh komponen, kata kunci ini dalam fungsi panggil balik akan merujuk kepada contoh komponen, membenarkan akses kepada kaedahnya dan hartanah, termasuk this.setState.

Pengikatan Tambahan:

Dalam sesetengah kes, pengikatan tambahan mungkin diperlukan. Contohnya, jika kaedah init VK juga dipanggil dalam componentDidMount, kaedah itu juga mesti terikat pada contoh komponen:

VK.init(function() {
  console.info("API initialisation successful");
  VK.api('users.get', { fields: 'photo_50' }, function(data) {
    if (data.response) {
      this.setState({ // the error happens here
        FirstName: data.response[0].first_name
      });
      console.info(this.state.FirstName);
    }
  }.bind(this));
}.bind(this), function() {
  console.info("API initialisation failed");
}, '5.34');
Salin selepas log masuk

Atas ialah kandungan terperinci Mengapakah Fungsi `this.setState` React Tidak Tersedia dalam Panggilan Balik ComponentDidMount?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!