Hapuskan kebergantungan berlebihan dalam useEffect React
P粉333395496
P粉333395496 2024-04-01 13:43:57
0
1
492

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.

P粉333395496
P粉333395496

membalas semua(1)
P粉291886842

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 currentTenantcurrentProjects 是原语 - 我想情况还不是这样(例如名为 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".

Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan