Այժմ, երբ ես գրավեցի ձեր ուշադրությունը 😵💫, եկեք խոսենք այն մասին, թե ինչպես են ազդեցությունները տարբերվում բաղադրիչներից: Մենք բոլորս գիտենք, որ բաղադրիչները կարող են տեղադրվել, թարմացվել և ապամոնտաժվել DOM-ից: A useEffect
-ը մի փոքր այլ է, քանի որ այն կարող է աշխատել և կարող է դադարեցնել աշխատանքը:
Շատ ավելի պարզ, քան դասի բաղադրիչները 🥲:
Ամենաշփոթեցնող բաներից մեկը useEffect
-ի կախվածության ցուցակն է: Սովորաբար, ավելի լավ է, որ այն հնարավորինս կարճ լինի, քանի որ ցուցակի չափից շատ փոփոխականները կհանգեցնեն նրան, որ այն չափազանց շատ է ցուցադրվում, և եթե դուք գալիս եք կախվածության ցուցակի, որը չափազանց երկար է, ապա փորձեք բաժանել այն ավելի փոքր էֆեկտների:
Բացի այդ, երբ մենք ստեղծում ենք փոփոխական, որը չի փոխվում, ապա մենք կարիք չունենք այն ավելացնել կախվածության ցանկում: Ահա թե ինչու դուք պետք է փորձեք օգտագործել հաստատուններ՝ ծրագրավորման իմաստով:
Երբ մենք գրում ենք կոդը, առաջինն այն է, որ մենք փորձում ենք և մտածում բաղադրիչների մասին այնպես, որ կարծում ենք, որ useEffect
-ը պետք է աշխատի, երբ բաղադրիչը տեղադրվի, և դադարեցվի, երբ բաղադրիչն անջատվի:
Դե, երբեմն դա կստացվի, և բոլորը և ձեր ղեկավարը ուրախ կլինեն 🎉🥳, բայց երբեմն դա չի կտրի: Եթե Ձեզ անհրաժեշտ է useEffect
-ը մի քանի անգամ գործարկելու համար, երբ բաղադրիչը միացված է, ապա այն կցելը իր կյանքի ցիկլի հետ բավականին վատ պրակտիկա է, այն կաշխատի այնքան անգամ, երբ դրա կարիքը ունեք, և երբ դուք դա չեք անում, դա, իհարկե, մղձավանջ կլինի 👿 , եթե այն կարելի է հեռացնել, ապա ավելի լավ է, քան ունենալը, ավելի քիչ մատուցման ցիկլեր…. Եթե դա անհնար է 🙈. Հատկապես, երբ այն ընդհանրապես տեղ չունի այդ բաղադրիչի ներսում, միայն այն պատճառով, որ հեշտ է այն տեղադրել այնտեղ…
Լավ լուծում է այն բաղադրիչից հանել որպես հատուկ կեռիկ և ավելացնել դրա համապատասխան կախվածությունը, որպեսզի այն ապրի այդ բաղադրիչի կյանքի ցիկլից դուրս, որը տեղադրվելու է և երբեք չի կարող ապամոնտաժվել կամ չնախատեսված վերարտադրում առաջացնել ♻️:
Լավ ընդհանուր կանոնն այն է, որ յուրաքանչյուր useEffect
անկախ է և ունի կախվածության փոքր ցուցակ և չի առաջացնի «ընդմիջում» այլ էֆեկտներում, որոնք դուք ունեք, որոնք գտնվում են նույն «մոտակայքում» և չի առաջացնում շղթայական ռեակցիա. շղթան պարտադիր է և չի կարող այլ կերպ կառավարվել:
Հիշեք, որ երբ useEffect
-ն ավելի քիչ սերտորեն զուգակցված է, ապա ապագայում ավելի հեշտ է պահպանել կոդը, այն, ինչ մենք այսօր ծույլ ենք իրականացնել, վաղը լրացուցիչ կաշխատենք վրիպազերծելու և ռեֆրակտորելու համար 🤔: