Saya mempunyai useEffect yang mempunyai dua kebergantungan:
useEffect(() => { doSomething(); }, [currentTenant, currentProjects])
Walau bagaimanapun, currentProjects sedang ditetapkan dalam useEffect yang mempunyai CurrentTenant sebagai kebergantungan:
useEffect(() => { setCurrentProjects(); }, [currentTenant]);
doSomething()
取决于这两个状态,所以我想知道当 currentTenant
更改时 doSomething()
是否会运行两次:一次当 currentTenant
本身更改时,一次当 currentProjects
(由 currentTenant 控制)
) perubahan. < /p>
Adakah ini berlebihan? Apakah cara yang lebih baik untuk melakukan ini? Mungkin dengan bermula dari doSomething()
useEffect 中删除 currentTenant
.
Terima kasih terlebih dahulu atas bantuan anda.
Saya rasa anda membuat perkara mudah ralat dan tidak perlu rumit. Dalam pengalaman saya, setiap kali orang. Cuba gunakan
useEffect
dengan bijak, ia hanya merosakkannya.Mula-mula, pastikan
currentTenant
和currentProjects
是原语 - 我想情况还不是这样(例如名为currentProjects
sesuatu), supaya kebergantungan anda tidak berfungsi seperti yang diharapkan.Kedua, jika boleh, sebaris
doSomething()
和setCurrentProjects()
kod anda supaya lebih mudah untuk menjejaki pembolehubah/pergantungan yang sebenarnya anda harapkan. Pengecualian wujud jika anda telah menghantar kaedah ini kepada komponen atau menggunakannya di beberapa tempat.Ketiga, jangan bergantung pada perintah pelaksanaan memanggil berbilang
useEffect
cangkuk. Tiada pesanan yang dijamin dalam dokumentasi, dan ia tidak masuk akal untuk panggilan tak segerak. Jadikan mereka bebas antara satu sama lain. Oleh itu, jangan menganggap redundansi tanpa kepastian. Tambahan pula, walaupun ia berfungsi seperti yang diharapkan, ini adalah pengoptimuman pramatang - faedahnya boleh diabaikan, tetapi kod itu lebih sukar untuk difahami.Keempat, anda bergantung pada imaginasi bahawa tiada apa yang akan berubah dalam komponen anda, dan diri masa depan anda serta rakan sekerja anda akan mengetahui/mengingat dengan tepat pertimbangan pergantungan anda. Atau anda perlu mengulasnya dengan penjelasan panjang lebar yang menjadikan idea itu lebih kompleks.
Secara amnya,
useEffect
kebergantungan hendaklah semudah dan ekspresif yang mungkin. Mereka tidak mempunyai banyak sihir, tetapi mereka mempunyai ramai orang. Masih (termasuk saya) kacau mereka kadang-kadang. Ini berlaku apabila anda kebanyakannya menyimpang daripada peraturan "senaraikan sahaja semua primitif yang anda gunakan".