Array push mengembalikan panjangnya
this.state.myArray.push('new value')
mengembalikan panjang dari array yang diperpanjang, bukan dari array itu sendiri. Array.prototype.push () .
Saya kira Anda mengharapkan nilai yang dikembalikan menjadi array.
Kekekalan
Sepertinya ini lebih seperti perilaku React:
JANGAN PERNAH mutasi this.state secara langsung, karena memanggil setState () setelahnya dapat menggantikan mutasi yang Anda buat. Perlakukan negara ini seolah-olah tidak dapat diubah. React.Component .
Saya kira, Anda akan melakukannya seperti ini (tidak terbiasa dengan React):
var joined = this.state.myArray.concat('new value');
this.setState({ myArray: joined })
console.log(this.state.myArray)
, selalu ada yang tertinggal. Tahu kenapa?setState()
enqueues berubah ke status komponen dan memberi tahu React bahwa komponen ini dan turunannya perlu dirender ulang dengan status yang diperbarui. Jadi saya kira itu tidak diperbarui pada saat itu tepat setelah mengaturnya. Bisakah Anda memposting contoh kode, di mana kami dapat melihat titik mana yang Anda atur dan masuk?.concat('new value');
harus.concat(['new value']);
concat()
metode ini. Lihat: developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/… ( Array dan / atau nilai untuk digabungkan ke dalam array baru. )Menggunakan es6 bisa dilakukan seperti ini:
Sebarkan sintaks
sumber
this.props
danthis.state
dapat diperbarui secara asinkron, Anda tidak boleh mengandalkan nilainya untuk menghitung status selanjutnya." Dalam kasus memodifikasi larik, karena larik sudah ada sebagai propertithis.state
dan Anda perlu mereferensikan nilainya untuk menyetel nilai baru, Anda harus menggunakan bentuksetState()
yang menerima fungsi dengan status sebelumnya sebagai argumen. Contoh:this.setState(prevState => ({ myArray: [...this.state.myArray, 'new value'] }));
Lihat: reactjs.org/docs/…Pendekatan yang direkomendasikan dalam versi React yang lebih baru adalah dengan menggunakan fungsi pembaru saat memodifikasi status untuk mencegah kondisi balapan:
Dorong string ke akhir larik
Dorong string ke awal larik
Dorong objek ke akhir larik
Dorong objek ke awal larik
sumber
this.setState((prevState) => ({ myArray: [values, ...prevState.myArray], }));
Anda seharusnya tidak mengoperasikan negara sama sekali. Setidaknya, tidak secara langsung. Jika Anda ingin memperbarui larik Anda, Anda akan ingin melakukan sesuatu seperti ini.
Mengerjakan objek negara secara langsung tidak diinginkan. Anda juga dapat melihat pembantu keabadian React.
https://facebook.github.io/react/docs/update.html
sumber
.slice()
untuk membuat array baru dan menjaga keabadian. Terima kasih untuk bantuannya.Anda dapat menggunakan
.concat
metode untuk membuat salinan array Anda dengan data baru:Tetapi berhati-hatilah terhadap perilaku khusus
.concat
metode ketika melewati array -[1, 2].concat(['foo', 3], 'bar')
akan menghasilkan[1, 2, 'foo', 3, 'bar']
.sumber
Kode ini bekerja untuk saya:
sumber
fetch(`api.openweathermap.org/data/2.5/forecast?q=${this.searchBox.value + KEY} `) .then( response => response.json() ) .then( data => { this.setState({ reports: this.state.reports.push.apply(this.state.reports, data.list)}); });
this.state = { reports=[] }
... tolong saya ingin tahu apa yang saya lakukan salahReact-Native
jika Anda juga ingin UI Anda (mis. flatList Anda) diperbarui, gunakan PrevState: pada contoh di bawah ini jika pengguna mengklik tombol, itu akan menambahkan objek baru ke daftar (baik dalam model maupun UI )
sumber
Dengan cara berikut kita dapat memeriksa dan memperbarui objek
sumber
Di sini Anda tidak dapat mendorong objek ke array keadaan seperti ini. Anda dapat mendorong seperti cara Anda dalam larik normal. Di sini Anda harus mengatur negara,
sumber
Jika Anda hanya mencoba memperbarui status seperti itu
Pertimbangkan pendekatan ini
Pada dasarnya prevState menulis this.state untuk kita.
sumber