React တွင် Refs များနှင့်အလုပ်လုပ်ရန် useRef Hook

ဤသင်ခန်းစာတွင် ကျွန်ုပ်တို့သည် refs များနှင့် အလုပ်လုပ်ပါမည်။ ရှင်းလင်းစေရန် hook <useRef ၏အလုပ်လုပ်ပုံကို hook <useState နှင့် နှိုင်းယှဉ်၍ ကြည့်ကြပါစို့။

ခလုတ်တစ်ခုပါဝင်သည့် component တစ်ခုကို ဖန်တီးကြပါစို့။

App.jsxreturn (
  <div>
    <button>
      state click
    </button>
  </div>
);

Component အတွင်းသို့ <useState ကို import လုပ်ပါမည်။

App.jsximport { useState } from 'react';

ပြီးနောက် state <state ကို သတ်မှတ်ပါမည်။

App.jsxconst [state, setState] = useState(0);

ယခု ကျွန်ုပ်တို့သည် ခလုတ်ကိုနှိပ်လိုက်သောအခါတွင် ကျွန်ုပ်တို့၏ <state သည် <1 တိုးသွားစေမည်။ State ၏တန်ဖိုးကို ခလုတ်ပေါ်ရှိစာသားထဲတွင် တိုက်ရိုက်ထုတ်ပြပါမည်။

App.jsx<button onClick={handleStateClick}>
  state click: {state}
</button>

ခလုတ်ကိုနှိပ်ခြင်းကို ကိုင်တွယ်ရန် function <handleStateClick ကို ဖော်ပြပါမည်။

App.jsxfunction handleStateClick() {
  setState(state + 1);
}

ခလုတ်ကို နှိပ်ကြည့်ပါက state ၏တန်ဖိုး မည်သို့တိုးလာသည်ကို မြင်ရပါမည်။

ယခု state ကိုအသုံးမပြုဘဲ ref ကိုအသုံးပြု၍ component <App ကို ဖန်တီးကြည့်ကြပါစို့။

ပထမဦးစွာ၊ component အတွင်းသို့ <useRef ကို import လုပ်ပါမည်။

App.jsximport { useRef } from 'react';

ပြီးနောက် ref <ref ကို သတ်မှတ်ပါမည်။ Hook <useRef သည် <current ဟူသော property တစ်ခုတည်းသာရှိသည့် ref object တစ်ခုကို ပြန်ပေးပြီး ၎င်းသည် နောက်ပိုင်းတွင် ကျွန်ုပ်တို့စိတ်ဝင်စားမည့်အရာဖြစ်သည်။ ၎င်း၏ကနဦးတန်ဖိုးကို <0 သတ်မှတ်ပါမည်။

App.jsxconst ref = useRef(0);

ခလုတ်ပေါ်သို့ နှိပ်ခြင်းအတွက် event handler တစ်ခုထည့်ပါမည်။ <ref ကိုယ်တိုင်ကို ဖတ်ခြင်း/ပြောင်းလဲခြင်းမဟုတ်ဘဲ ၎င်း၏ property <current ကိုသာဖတ်ရန်/ပြောင်းလဲရန် လိုအပ်သည်ကို သတိရပါ။

App.jsx<button onClick={handleRefClick}>
  ref click: {ref.current}
</button>

ကျွန်ုပ်တို့၏ခလုတ်ကိုနှိပ်ခြင်းအတွက် event handler function ကို ထည့်ပါမည်။ ဤနေရာတွင် state ဖြင့်ပြထားသောဥပမာကဲ့သို့ပင် <current ကို <1 တိုးပါမည်။ ၎င်း၏တန်ဖိုးကိုပြောင်းလဲရန် <setState function လိုအပ်သည့် state နှင့်မတူဘဲ၊ ref ၏ property နှင့်အတူ ကျွန်ုပ်တို့သည် တိုက်ရိုက်အလုပ်လုပ်ပါသည်။

App.jsxfunction handleRefClick() {
  ref.current = ref.current + 1;
}

ယခု ကျွန်ုပ်တို့၏ခလုတ်ကို နှိပ်ကြည့်ပါ။ ကျွန်ုပ်တို့ ဘာတွေမြင်ရသနည်း။ ၎င်းကိုနှိပ်သောအခါ၊ အစက <0 ဖြစ်ခဲ့သကဲ့သို့ပင် ပြောင်းလဲမသွားပါ။

တန်ဖိုးပြောင်းလဲခြင်းရှိမရှိ သံသယဝင်စရာဖြစ်လာနိုင်ပါသည်။ ကျွန်ုပ်တို့စစ်ဆေးကြည့်ကြပါစို့။ ဤအတွက် event handler function ထဲတွင် <current ၏တန်ဖိုးကို console တွင် ထုတ်ပြသည့် code စာကြောင်းတစ်ခုထပ်ထည့်ပါမည်။

App.jsxfunction handleRefClick() {
  ref.current = ref.current + 1;
  console.log('ref click: ' + ref.current);
}

ယခု၊ browser ထဲရှိ console ကိုဖွင့်ကာ ခလုတ်ကိုထပ်မံနှိပ်ပြီး တန်ဖိုးသည် တကယ်ပင် နှိပ်သည့်အကြိမ်တိုင်းတွင် ပြောင်းလဲနေပြီး လှည့်စားမှုမရှိကြောင်း သေချာစေပါမည်။

ယခုကျွန်ုပ်တို့မြင်ရသည့်အတိုင်း state နှင့်မတူဘဲ၊ ref ၏တန်ဖိုးပြောင်းလဲခြင်းသည် component ၏ re-render ကို မဖြစ်စေပါ။ ထို့ကြောင့် ခလုတ်ပေါ်ရှိစာသားထဲတွင် ကနဦးတန်ဖိုး <0 ကိုသာ အကြိမ်တိုင်းမြင်ရခြင်းဖြစ်သည်။

ထို့ကြောင့်၊ သင့်ဒေတာများကို render လုပ်ရန်အသုံးပြုပါက ၎င်းတို့ကို state ထဲတွင်သိမ်းထားပါ။ သင်သည် re-render မလိုအပ်ပါက၊ ထိုသို့သောအခြေအနေတွင် refs များကိုအသုံးပြုခြင်းသည် ပို၍ထိရောက်မှုရှိနိုင်သည်။

Задание 1

သင့် component တွင် စာသား <'text' ပါဝင်သည့် စာပိုဒ်တစ်ခုနှင့် ခလုတ်တစ်ခုရှိသည်ဆိုပါစို့။ ခလုတ်ကိုနှိပ်သည့်အကြိမ်တိုင်းတွင် စာပိုဒ်၏အဆုံးသို့ အာမေဋိတ်အမှတ် (!) ပေါင်းထည့်သွားစေရန် ပြုလုပ်ပါ။ State ကိုအသုံးပြု၍ ပြုလုပ်ပါ။

Задание 2

Component <App ကို ဖန်တီးပါ၊ သို့သော်ယခုအခါ state အစား ref ကိုအသုံးပြုပါ။ ခလုတ်ကိုနှိပ်သောအခါ စာပိုဒ်၏စာသားမပြောင်းလဲကြောင်း သေချာပါစေ။ စာပိုဒ်၏စာသားကို console တွင်ထုတ်ပြခြင်းကိုလည်း ထည့်ပါ၊ ၎င်းကိုဖွင့်ကာ စာသားအမှန်တကယ်ပြောင်းလဲကြောင်း သေချာပါစေ။