برنامه نویسی

React Hooks: کاوش در قدرت «useEffect» هوک.

آیا از یادگیری React در زمانی که اصلاً به اجزای کلاس نیاز ندارید هیجان زده هستید؟ خب، من هم هیجان‌زده هستم، زیرا برای یادگیری روش‌های چرخه زندگی مانند آن componentDidSomething، زمان بسیار سختی را سپری می‌کردم. ما در زمان جالبی یاد می گیریم که تیم React تمام مشکلات ممکن را برای معرفی قلاب های React پشت سر گذاشته است. در این مقاله در مورد useEffect به طور خاص هوک و نقش آن در اجزای عملکردی React.

را useEffect هوک به اجزای عملکردی راهی برای همگام سازی با سیستم های خارجی می دهد، عملیاتی که در اصل تنها با روش های چرخه حیات جزء کلاس امکان پذیر بود. بدون صحبت های کوچک، اجازه دهید به چیزهای خوب در مورد آن بپردازیم useEffect قلاب. به منظور استفاده از useEffect قلاب، باید آن را از آن وارد کنیم react با استفاده از خط زیر:

    import {useEffect} from 'react'
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

را useEffect قلاب به عنوان صادراتی با نام ارائه می شود، بنابراین ما آن را داخل بریس های فرفری وارد می کنیم.

را useEffect از hook می‌توان برای انجام وظایف مختلفی از جمله *** اتصال شنوندگان رویداد، واکشی داده‌ها از یک API خارجی، حذف شنوندگان رویداد، ایجاد و لغو اشتراک‌ها و ایجاد درخواست‌های شبکه استفاده کرد. بیشتر از این وظایف با غواصی عمیق تر در React Docs جدید موجود است.

نحو برای فراخوانی useEffect قلاب ساده است، باید با آن تماس بگیرید useEffect عملکرد با کد راه اندازی و آرایه وابستگی ها.

     useEffect(setupCode, dependecyArray)
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

پارامتر setupCode نشان دهنده کدی است که یک عارضه جانبی را انجام می دهد و dependencyArray نشان دهنده و آرایه ای از همه لوازم و/یا بیان می کند که عارضه جانبی به آن بستگی دارد.

بسته به اینکه کدام وظایف را باید در داخل قلاب اجرا کنید و هر چند وقت یکبار می خواهید عوارض جانبی ایجاد کنید، useEffect را می توان به روش های مختلف فراخوانی کرد. ما گزینه های زیر را مورد بحث قرار خواهیم داد و با فراخوانی شروع می کنیم useEffect قلاب برای اجرای یک عارضه جانبی تنها یک بار.

اجرای اثرات جانبی فقط یک بار پس از رندر اولیه

گاهی اوقات شما می خواهید یک اثر جانبی خاص را فقط یک بار پس از رندر اولیه انجام دهید و نه بیشتر. چنین مواردی می تواند شنونده رویداد را به یک عنصر در DOM متصل کند. برای اینکه تنها یک بار پس از رندر اولیه، عوارض جانبی را اجرا کنیم، آن را فراخوانی می کنیم useEffect قلاب با یک آرایه وابستگی خالی.

useEffect(()=>{
        window.addEventListener('mousemove', logMousePosition)

        return ()=>{
            window.removeEventListener('mousemove', logMousePosition)
        }
    }, [])
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

در قطعه کد، mousemove شنونده رویداد اضافه شده است window یک بار پس از رندر اولیه

اجرای مشروط عوارض جانبی

بیشتر اوقات، ما می خواهیم عملیات عوارض جانبی را بر اساس تغییرات در مقادیر props یا حالت ها یا گاهی اوقات هر دو اجرا کنیم. در این مورد، باید به React بگوییم که متغیرهای خاصی را برای تغییرات رعایت کند. اگر تغییری در مقادیری که عارضه جانبی به آن وابسته است رخ دهد، کد راه‌اندازی در اثر جانبی فعال می‌شود. برای دستیابی به این امر تماس می گیریم useEffect با لیستی از وابستگی ها

 useEffect(()=>{
        document.title = `The count is ${count}`
    }, [count])
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

این بار useEffect هوک با یک وابستگی در داخل آرایه وابستگی فراخوانی می شود. این بدان معنی است که قلاب همیشه مراقب تغییرات در ارزش است count متغیر و در صورت تغییر مقدار آن، عنوان سند جانبی با مقدار جدید به روز می شود count.

اجرای جلوه های جانبی بعد از هر رندر

به عنوان مثال، شما می خواهید مقدار یک متغیر خاص را بعد از هر ثانیه از زمان رندر تا زمانی که Component رندر کننده آن متغیر از DOM حذف می شود، به روز کنید و روی صفحه نمایش دهید. در این حالت شما می خواهید که بعد از هر بار رندر کردن مجدد، این اثر علت شود. برای دستیابی به این رفتار، ما را صدا می کنیم useEffect با کدی که می خواهیم اجرا کنیم اما قلاب کنیم ما آرایه وابستگی را تعریف نمی کنیم. ما همه آن را مانند قطعه کد زیر تعریف نمی کنیم.

        const tick = (counter) =>{
            setCounter(() =>counter + 1)
        }
        console.log('call effect')
        const interval = setInterval(()=> tick(counter), 1000)
    })
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

این قطعه کد مقدار را به روز می کند count و پس از فاصله 1000 میکروثانیه آن را رندر می کند. این افکت درست بعد از اولین رندر و بعد از همه رندرها اجرا می شود.

پاکسازی عوارض جانبی با useEffect

در کدهای بالا ما عوارض جانبی انجام داده ایم و به آنچه می خواهیم می رسیم. بله، ما به آنچه می خواهیم می رسیم، اما وقتی کامپوننت را از DOM حذف می کنیم، چه اتفاقی برای عوارض جانبی می افتد؟ خب، اینجاست که پاکسازی وارد عمل می شود. هر بار که یک مؤلفه از DOM حذف می شود، باید تمام عوارض جانبی آن را نیز برگردانیم. بازگرداندن عوارض جانبی ممکن است شامل عملیاتی مانند لغو درخواست های شبکه، حذف شنوندگان رویداد، لغو اشتراک، حذف تایمر و غیره باشد.

پاکسازی عوارض جانبی ممکن است با بازگرداندن کد پاکسازی در داخل انجام شود useEffect فراخوانی تابع همانطور که در قطعه کد زیر انجام شده است.

 useEffect(()=>{
        const tick = (counter) =>{
            setCounter(() =>counter + 1)
        }
        console.log('call effect')
        const interval = setInterval(()=> tick(counter), 1000)

        return () => {clearInterval(interval)}
    })
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

این همان کد قسمت قبل است اما این بار یک کد پاکسازی اضافه می کنیم تا پاک شود interval هنگامی که مؤلفه ای که این اثر را ایجاد می کند از DOM نصب/حذف شود. به خاطر داشته باشید که کد بازگردانده شده تنها زمانی اجرا می شود که مؤلفه ای که اثر جانبی را ایجاد می کند از DOM حذف شود.

همه چیز در مورد آن است useEffect برای امروز قلاب کنید، به دنبال نمونه های بیشتری باشید و تمرین کنید. اگر علاقه مند به غواصی عمیق تر در این موضوع هستید، لطفاً به بررسی اسناد تیم react فکر کنید. یادگیری مبارک

نوشته های مشابه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

همچنین ببینید
بستن
دکمه بازگشت به بالا