React တွင် useEffect မှတဆင့် Global Event Handlers များ

ယခုကျွန်ုပ်တို့လိုချင်သည်မှာ ခလုတ်ကိုနှိပ်ခြင်းဖြင့်သာမက ကီးဘုတ်ပေါ်ရှိ Enter ကိုနှိပ်ခြင်းဖြင့်လည်း အရောင်ပြောင်းလိုပါသည်။ သာမန် React ဘဝတွင် global object window ကို addEventListener ဖြင့် နားထောင်ခြင်းမပြုလုပ်နိုင်ပါ။ ၎င်းအတွက် ကျွန်ုပ်တို့တွင် effects များရှိပါသည်။ useEffect ကိုအသုံးပြု၍ ဤလုပ်ဆောင်ချက်ကို ထည့်သွင်းကြပါစို့။

Enter ကိုနှိပ်သည့်အခါ အရောင်အနီသို့ပြောင်းစေမည့် function တစ်ခုကိုရေးကြပါစို့။

App.jsxfunction handleEnter(event) {
  if (event.keyCode === 13) {
    setColor('red');
  }
}

ယခု event listener ကို window သို့ useEffect hook အတွင်းတွင် ချိတ်ဆက်ကြပါစို့။

App.jsxuseEffect(() => {
  document.body.style.color = color;
  
  window.addEventListener('keydown', handleEnter);
}, [color]);

တည်ဆောက်သည့် function ရှိပါက အနာဂတ်တွင် ပြဿနာများကိုရှောင်ရှားရန် သန့်ရှင်းရေး (cleanup) သို့မဟုတ် စာရင်းမှထုတ်ခြင်း (unsubscribe) code ကို useEffect အတွင်း၌ အမြဲပြန်ပေးရပါမည်။ ဤကိစ္စတွင် addEventListener ချိတ်ဆက်ပြီးနောက် ၎င်း၏ဖျက်ခြင်းကို ပြန်ပေးရပါမည်။

App.jsxuseEffect(() => {
  document.body.style.color = color;
  
  window.addEventListener('keydown', handleEnter);
  
  return () => {
    window.removeEventListener('keydown', handleEnter);
  };
}, [color]);
Задание 1

Component တစ်ခုပေးထားသည်။ စာမျက်နှာ၏ မည်သည့်နေရာကိုမဆိုနှိပ်လိုက်သည့်အခါ ထို component ၏ background အရောင်ပြောင်းသွားစေရန် လုပ်ဆောင်ပေးပါ။

Задание 2

�ှိပ်လိုက်သည့်အခါ block တစ်ခုပေါ်လာမည့် �င့်ခ်တစ်ခုလုပ်ပါ။ Browser window ၏ မည်သည့်နေရာကိုမဆို နှိပ်လိုက်သည့်အခါတိုင်း ကျွန်ုပ်တို့၏ block ကို ပိတ်သွားစေရန် လုပ်ဆောင်ပေးပါ။