Saya mengharapkan status untuk memuat ulang pada perubahan alat peraga, tetapi ini tidak berfungsi dan user
variabel tidak diperbarui pada useState
panggilan berikutnya , apa yang salah?
function Avatar(props) {
const [user, setUser] = React.useState({...props.user});
return user.avatar ?
(<img src={user.avatar}/>)
: (<p>Loading...</p>);
}
reactjs
react-hooks
vitalyster
sumber
sumber
React.useEffect
untuk mengatur status awal setiap saat.Komponen fungsional yang kita gunakan
useState
untuk mengatur nilai awal ke variabel kita, jika kita melewatkan nilai awal melalui props, itu akan selalu menetapkan nilai awal yang sama sampai Anda tidak menggunakanuseEffect
hook,misalnya kasus Anda ini akan melakukan pekerjaan Anda
React.useEffect(() => { setUser(props.user); }, [props.user])
Fungsi yang diteruskan ke useEffect akan berjalan setelah render diterapkan ke layar.
Secara default, efek dijalankan setelah setiap render selesai, tetapi Anda dapat memilih untuk mengaktifkannya hanya jika nilai tertentu telah berubah.
jika Anda hanya mengirimkan satu argumen ke useEffect, metode ini akan menjalankan metode ini setelah setiap render Anda dapat memutuskan kapan harus mengaktifkannya
FunctionYouWantToRunAfterEveryRender
dengan meneruskan argumen kedua ke useEffectseperti yang Anda perhatikan, saya sedang melewati [props.user] sekarang
useEffect
hanya akan mengaktifkanFunctionYouWantToRunAfterEveryRender
fungsi ini jikaprops.user
diubahSaya harap ini membantu pemahaman Anda, beri tahu saya jika ada perbaikan yang diperlukan, terima kasih
sumber
Parameter yang diteruskan ke
React.useState()
hanya nilai awal untuk status tersebut. React tidak akan mengenali itu sebagai mengubah keadaan, hanya mengatur nilai defaultnya. Anda akan ingin menyetel status default pada awalnya, lalu memanggil secara bersyaratsetUser(newValue)
, yang akan dikenali sebagai status baru, dan merender ulang komponen.Saya akan merekomendasikan dengan hati-hati memperbarui status tanpa beberapa jenis kondisi untuk menjaganya dari terus-menerus memperbarui, dan karena itu rendering ulang setiap alat peraga diterima. Anda mungkin ingin mempertimbangkan untuk mengangkat fungsionalitas status ke komponen induk dan meneruskan status induk ke Avatar ini sebagai penyangga.
sumber
Menurut dokumentasi ReactJS tentang Hooks :
Satu-satunya interaksi Anda di sini harus terjadi pada perubahan alat peraga, yang tampaknya tidak berhasil. Anda dapat (masih menurut dokumen) menggunakan componentDidUpdate (prevProps) untuk secara proaktif menangkap pembaruan apa pun ke props.
PS: Saya tidak memiliki cukup kode untuk menilai, tetapi tidak bisakah Anda secara aktif mengaturUser () di dalam fungsi Avatar (props) Anda?
sumber
Di dunia react, Anda harus memperbarui status Anda dalam fungsi componentWillRecieveProps (nextProps), dalam kasus seperti itu.
sumber