Diskusi ini telah berlangsung beberapa lama dan jawaban @Alexander T. memberikan panduan yang baik untuk mengikuti React seperti saya. Dan saya akan berbagi beberapa pengetahuan tambahan tentang memanggil API yang sama beberapa kali untuk menyegarkan komponen, saya pikir itu mungkin masalah umum yang mungkin dihadapi pemula pada awalnya.
componentWillReceiveProps(nextProps)
, dari dokumentasi resmi :
Jika Anda perlu memperbarui status sebagai respons terhadap perubahan prop (misalnya, untuk mengatur ulang), Anda dapat membandingkan this.props dan nextProps dan melakukan transisi status menggunakan this.setState () dalam metode ini.
Kita dapat menyimpulkan bahwa di sini adalah tempat kami menangani alat peraga dari komponen induk, memiliki panggilan API, dan memperbarui status.
Berdasarkan contoh @Alexander T.:
export default class UserList extends React.Component {
constructor(props) {
super(props);
this.state = {person: []};
}
componentDidMount() {
//For our first load.
this.UserList(this.props.group); //maybe something like "groupOne"
}
componentWillReceiveProps(nextProps) {
// Assuming parameter comes from url.
// let group = window.location.toString().split("/")[*indexParameterLocated*];
// this.UserList(group);
// Assuming parameter comes from props that from parent component.
let group = nextProps.group; // Maybe something like "groupTwo"
this.UserList(group);
}
UserList(group) {
$.getJSON('https://randomuser.me/api/' + group)
.then(({ results }) => this.setState({ person: results }));
}
render() {
return (...)
}
}
Memperbarui
componentWillReceiveProps()
akan ditinggalkan.
Berikut ini hanya beberapa metode (semuanya dalam Doc ) dalam siklus hidup yang saya pikir akan terkait dengan penerapan API dalam kasus umum:
Dengan merujuk diagram di atas:
Sebarkan API di componentDidMount()
Skenario yang tepat untuk melakukan panggilan API di sini adalah bahwa konten (dari respons API) komponen ini akan statis, componentDidMount()
hanya menyala sekali saat komponen sedang dipasang, bahkan alat peraga baru dilewatkan dari komponen induk atau memiliki tindakan untuk memimpin re-rendering
.
Komponen memeriksa perbedaan untuk merender ulang tetapi tidak memasang kembali .
Kutipan dari doc :
Jika Anda perlu memuat data dari titik akhir jarak jauh, ini adalah tempat yang baik untuk membuat instantiate permintaan jaringan.
- Sebarkan API di
static getDerivedStateFromProps(nextProps, prevState)
Kita harus memperhatikan bahwa ada dua jenis pembaruan komponen , setState()
dalam komponen saat ini tidak akan memicu metode ini, tetapi rendering ulang atau alat peraga baru dari komponen induk lakukan. Kami dapat menemukan bahwa metode ini juga menyala saat pemasangan.
Ini adalah tempat yang tepat untuk menggunakan API jika kami ingin menggunakan komponen saat ini seperti templat, dan parameter baru untuk API adalah alat peraga yang berasal dari komponen induk .
Kami menerima respons berbeda dari API dan mengembalikan yang baru di state
sini untuk mengubah konten komponen ini.
Sebagai contoh:
Kami memiliki daftar dropdown untuk Mobil yang berbeda di komponen induk, komponen ini perlu menunjukkan detail dari yang dipilih.
- Sebarkan API di
componentDidUpdate(prevProps, prevState)
Berbeda dari static getDerivedStateFromProps()
, metode ini dipanggil segera setelah setiap rendering kecuali rendering awal. Kami dapat membuat panggilan API dan membuat perbedaan dalam satu komponen.
Perluas contoh sebelumnya:
Komponen untuk menampilkan detail Mobil mungkin berisi daftar seri mobil ini, jika kita ingin memeriksa yang produksi 2013, kita dapat mengklik atau memilih atau ... daftar item untuk memimpin yang pertama setState()
untuk mencerminkan ini perilaku (seperti menyoroti item daftar) di komponen ini, dan berikut ini componentDidUpdate()
kami mengirim permintaan kami dengan parameter baru (status). Setelah mendapatkan respons, kami setState()
kembali untuk merender konten yang berbeda dari detail Mobil. Untuk mencegah hal-hal berikut componentDidUpdate()
dari menyebabkan infinity loop, kita perlu membandingkan keadaan dengan memanfaatkan prevState
di awal metode ini untuk memutuskan apakah kita mengirim API dan merender konten baru.
Metode ini benar-benar dapat dimanfaatkan seperti halnya static getDerivedStateFromProps()
dengan alat peraga, tetapi perlu menangani perubahan props
dengan memanfaatkan prevProps
. Dan kita perlu bekerja sama dengan componentDidMount()
untuk menangani panggilan API awal.
Kutipan dari doc :
... Ini juga tempat yang baik untuk melakukan permintaan jaringan selama Anda membandingkan alat peraga saat ini dengan alat peraga sebelumnya ...
componentDidMount
panggilan balik.