Saya baru mengenal Perpustakaan React.js dan saya telah mempelajari beberapa tutorial dan saya menemukan:
this.setState
this.replaceState
Deskripsi yang diberikan tidak terlalu jelas (IMO).
setState is done to 'set' the state of a value, even if its already set
in the 'getInitialState' function.
Demikian pula,
The replaceState() method is for when you want to clear out the values
already in state, and add new ones.
Saya mencoba this.setState({data: someArray});
diikuti this.replaceState({test: someArray});
dan kemudian menghibur mereka dan saya menemukan bahwa state
sekarang memiliki keduanyadata
dan test
.
Kemudian, saya mencoba this.setState({data: someArray});
diikuti this.setState({test: someArray});
dan kemudian konsol.logged mereka dan saya menemukan bahwa state
lagi memiliki keduanyadata
dan test
.
Lalu, apa sebenarnya perbedaan keduanya?
javascript
frontend
reactjs
myusuf
sumber
sumber
Jawaban:
Dengan
setState
status saat ini dan sebelumnya digabungkan. DenganreplaceState
, itu membuang keadaan saat ini, dan menggantinya dengan hanya apa yang Anda berikan. BiasanyasetState
digunakan kecuali Anda benar-benar perlu menghapus kunci karena suatu alasan; tetapi menyetelnya ke false / null biasanya merupakan taktik yang lebih eksplisit.Meskipun mungkin, itu bisa berubah; replaceState saat ini menggunakan objek yang diteruskan sebagai status, yaitu
replaceState(x)
, dan setelah disetelthis.state === x
. Ini sedikit lebih ringan darisetState
, jadi ini dapat digunakan sebagai pengoptimalan jika ribuan komponen sering menyetel statusnya.Saya menegaskan ini dengan kasus uji ini .
Jika keadaan Anda saat ini
{a: 1}
, dan Anda meneleponthis.setState({b: 2})
; ketika negara diterapkan, itu akan terjadi{a: 1, b: 2}
. Jika Anda meneleponthis.replaceState({b: 2})
negara Anda akan{b: 2}
.Catatan samping: Status tidak diatur secara instan, jadi jangan lakukan
this.setState({b: 1}); console.log(this.state)
saat menguji.sumber
.setState({...}, callback)
Definisi dengan contoh:
Catat ini dari dokumen , meskipun:
Hal yang sama berlaku untuk
replaceState()
sumber
Menurut dokumen ,
replaceState
mungkin tidak digunakan lagi:sumber
Sejak
replaceState
sekarang sudah usang, berikut ini solusi yang sangat sederhana. Meskipun mungkin sangat jarang bahwa Anda akan / harus menggunakan kebutuhan ini.Untuk menghapus negara:
Atau, sebagai alternatif, jika Anda tidak ingin memiliki banyak panggilan
setState
Pada dasarnya, semua kunci sebelumnya dalam status sekarang kembali
undefined
, yang dapat dengan mudah difilter denganif
pernyataan:Di JSX:
Terakhir, untuk "menggantikan" status, cukup gabungkan objek status baru dengan salinan status lama yang telah ada
undefined
, dan setel sebagai status:sumber