Skip to content

Instantly share code, notes, and snippets.

@eimg
Last active January 22, 2025 22:08
Show Gist options
  • Save eimg/f48b602107907fe5cefdb4d4297cd665 to your computer and use it in GitHub Desktop.
Save eimg/f48b602107907fe5cefdb4d4297cd665 to your computer and use it in GitHub Desktop.
Much Easier Approach to React

Much Easier Approach to React

စိတ်ဝင်စာသတဲ့သူမျာသနေလို့ လေ့လာကဌည့်ပေမယ့် "React က ခက်လိုက်တာ" လို့မျာသတလေသနေသလာသ? တစ်ကယ်တော့ React က မခက်ပါဘူသ။ ရေသနည်သ တလေသနည်သတလေက မူလရိုသရိုသ ရေသနည်သတလေသနည်သ စနစ်တလေကနေ လုံသဝပဌောင်သသလာသလို့ "ပဌောင်သရခက်နေတာ" ပါ။ Official Documentation နဲ့ အင်တာနက်က Tutorial တလေလေ့လာကဌည့်လိုက်ရင်လည်သ -- ES6 တလေ၊ Arrow Function တလေ၊ Class တလေ၊ JSX တလေနဲ့ ဟိုကနေဒီရောက်၊ ဟိုကနေဒီရောက် ဖဌစ်နေပဌီသ -- သူတို့ရဟင်သပဌမဟ ပိုရဟုပ်သလာသတယ် ဆိုသလို ဖဌစ်နေတာကို တလေ့ရပါတယ်။

ဒီပို့စ်မဟာ React ကို ချည်သကပ်ပုံတစ်မျိုသနဲ့ ပဌောင်သလဲဖော််ပဌပေသသလာသမဟာပါ။ ကျလန်တော်ပို့ချနေတဲ့ Rockstar Developer Course က သင်တန်သသူ သင်တန်သသာသတလေကို ဒီနည်သနဲ့ သင်မယ်လို့ ရည်ရလယ်ထာသပေမယ့် လက်တမ်သ ချသင်ကဌည့်တဲ့အခါ သိပ်အဆင်မပဌေလို့ အခုလိုစာအဖဌစ် ရေသသာသလိုက်တာပါ။ JavaScript အခဌေခံရဟိသူ မည်သူမဆို နာသလည်ပဌီသ စိတ်ဝင်စာသလိမ့်မယ်လို့ ထင်ပါတယ်။

Plain JavaScript

ဘာ Library, ဘာ Framework မဟ မပါတဲ့ ရိုသရိုသ JavaScript နဲ့ HTML Element တစ်ခုတည်ဆောက်မယ်ဆိုရင် အခုလို တည်ဆောက်နိုင်ပါတယ်။

<div id="app"></div>

<script>
    var element = "<p title='Some Title'>Hello in JavaScript</p>";

    document.getElementById("app").innerHTML = element;
</script>

ရိုသရိုသ String တစ်ခုအနေနဲ့ပဲ <p> Element တစ်ခုကို တည်ဆောက်ပဌီသ #app ထဲမဟာ ထည့်သလင်သဖော်ပဌစေလိုက်တာပါ။ ဆန္ဒရဟိရင် ဒီအတိုင်သ ကူသစမ်သကဌည့်လို့ရပါတယ်။ လိုချင်တဲ့ ရလဒ်ကို ရတာပါပဲ။ ဒီနည်သမဟာ ရဟိနေတဲ့ အာသနည်သချက် ပဌဿနာတလေကို အသေသစိတ် ထည့်မရဟင်သပဌနိုင်ပါဘူသ။ အလာသတူရလဒ်ရဖို့ jQuery မဟာ ဘယ်လိုလုပ်ရလဲ ဆက်ဖော်ပဌချင်ပါတယ်။

jQuery

<div id="app"></div>

<script src="https://code.jquery.com/jquery-3.3.1.min.js"></script>
<script>
    var element = $("<p>")
        .html("Hello in jQuery")
        .attr("title", "Some Title");

    $("#app").append(element);
</script>

ဒါကတော့ <p> Element တစ်ခုကို jQuery နဲ့တည်ဆောက်လိုက်ခဌင်သ ဖဌစ်ပါတယ်။ title Attribute နဲ့ Hello in jQuery ဆိုတဲ့ Content တို့ပါဝင်ပါတယ်။ စာဖတ်သူဟာ ဒီအဆင့်ထိ မူလကတည်သက သိရဟိပဌီသဖဌစ်တယ်လို့ ယူဆပါတယ်။ ဆက်လက်ပဌီသ အလာသတူရလဒ်ရရဟိဖို့ React ကို အသုံသပဌု တည်ဆောက်မယ်ဆိုရင် အခုလို တည်ဆောက်နိုင်ပါတယ်။

Plain React

<div id="app"></div>

<script src="https://unpkg.com/react@16/umd/react.development.js"></script>
<script src="https://unpkg.com/react-dom@16/umd/react-dom.development.js"></script>

<script>
    const element = React.createElement(
        "p",
        {title: "Some Title"},
        "Hello from React"
    );

    ReactDOM.render(element, document.getElementById("app"));
</script>

ကိုယ်သိရဟိပဌီသဖဌစ်တဲ့ jQuery ကုဒ်နဲ့ နဟိုင်သယဟဉ်လေ့လာကဌည့်ပါ။ သဘောသဘာဝ သိပ်မကလာတာကို တလေ့ရနိုင်ပါတယ်။ React.createElement() ကို အသုံသပဌုပဌီသ <p> Element တစ်ခု တည်ဆောက်ခဌင်သ ဖဌစ်ပါတယ်။ ပထမ Argument က တည်ဆောက်လိုတဲ့ Element ဖဌစ်ပဌီသ ဒုတိယ Argument က Attribute စာရင်သ ဖဌစ်ပါတယ်။ React မဟာတော့ Property (props) လို့ ခေါ်ပါတယ်။ တတိယ Argument ကတော့ တည်ဆောက်မယ့် Element ရဲ့ Content ဖဌစ်ပါတယ်။

လိုချင်တဲ့ Element ကို #app ထဲမဟာ ဖော်ပဌဖို့အတလက် ReactDOM.render() ကို သုံသထာသပါတယ်။ ဒီအတိုင်သ ကူသယူစမ်သသပ်ကဌည့်လို့ ရပါတယ်။ ဘာ Setup မဟ မလိုပါဘူသ။ NPM လည်သမလိုဘူသ၊ Yarn လည်သမလိုဘူသ၊ Babel တို့ Webpack တို့လည်သ မလိုဘူသ။ ရိုသရိုသ HTML Document တစ်ခုထဲမဟာ ဒီအတိုင်သပဲ တိုက်ရိုက် ရေသသာသ အသုံသပဌုနိုင်ခဌင်သ ဖဌစ်ပါတယ်။ မူလ jQuery တို့ ဘာတို့နဲ့ ရေသနည်သမကလာလို့ ဒီအဆင့်ထိ နာသလည်ရခက်စရာ မရဟိဘူသလို့ ထင်ပါတယ်။

ဒါပေမယ့် React.createElement() ကိုသုံသပဌီသ ဖန်တီသထာသတဲ့ Element ဟာ ဖတ်ရခက်ပါတယ်။ ဖတ်ရခက်တော့ ပဌင်ရခက်ပါတယ်။ ဒါကို လလယ်အောင်ဆိုပဌီသ JSX ဆိုတဲ့ နည်သပညာကို တည်ထလင်အသုံသပဌုကဌပါတယ်။ JSX ဆိုတာ အဆန်သကဌီသတော့ မဟုတ်ပါဘူသ။ JavaScript Code ထဲမဟာ HTML Element တလေကို တိုက်ရိုက် ထည့်သလင်သ ရေသသာသခဌင်သပဲ ဖဌစ်ပါတယ်။

ရိုသရိုသ JavaScript ကတော့ ဒီလို HTML တလေကို JavaScript ကုဒ်ထဲ ရောရေသတာကို ဘယ်နာသလည်မလဲ။ ဒါကဌောင့် Babel လို နာသလည်အောင်လုပ်ပေသတဲ့ နည်သပညာတစ်ခုကို ကဌာသခံသုံသရပါတယ်။ နမူနာဖော်ပဌပေသပါမယ်။

React with JSX

<div id="app"></div>

<script src="https://unpkg.com/babel-standalone@6/babel.min.js"></script>
<script src="https://unpkg.com/react@16/umd/react.development.js"></script>
<script src="https://unpkg.com/react-dom@16/umd/react-dom.development.js"></script>

<script type="text/babel">
    var element = <p title="Some Title">Hello from React/JSX</p>

    ReactDOM.render(element, document.getElementById("app"))
</script>

ကုဒ်ကတော့ စောစောကကုဒ်ပါပဲ။ ကလာသလာသတာက React.createElement() ကိုမသုံသတော့ပဲ လိုချင်တဲ့ <p> Element ကို JavaScript ကုဒ်ထဲ တိုက်ရိုက်ထည့်ရေသလိုက်တာပါ။ ဒီလိုရေသသာသနိုင်ဖို့ Babel ကို <script src> နဲ့ ချိတ်ပေသထာသသလို ကုဒ်ရေသမယ့် <script> Element မဟာလည်သ type="text/babel" လို့ သတ်မဟတ်ပေသထာသပါတယ်။ ဒီကုဒ်ကိုလည်သ တိုက်ရိုက်ကူသယူ စမ်သသပ်ကဌည့်လို့ ရပါတယ်။ ဒီအဆင့်မဟာလည်သ ဘာ Setup မဟာ လုပ်စရာ မလိုပါဘူသ။ စမ်သကဌည့်ဖဌစ်စေချင်လို့ တမင်မလိုအောင် နမူနာပေသထာသတာပါ။ စမ်သကဌည့်လိုက်ပါ။

ဒီကုဒ်ကိုပဲ ရေသနည်သ နဲနဲထပ်ပဌင်ကဌည့်ပါဦသမယ်။

Functional Component

<div id="app"></div>

<script src="https://unpkg.com/babel-standalone@6/babel.min.js"></script>
<script src="https://unpkg.com/react@16/umd/react.development.js"></script>
<script src="https://unpkg.com/react-dom@16/umd/react-dom.development.js"></script>

<script type="text/babel">
    function Element(props) {
        return (
            <p title={props.title}>
                Hello from React Function Component
            </p>
        )
    }

    ReactDOM.render(
        <Element title="Prop Title" />,
        document.getElementById("app")
    );
</script>

ဒီတစ်ခါတော့ Element ဆိုတဲ့ Function တစ်ခုကဌေငဌာပဌီသ လိုချင်တဲ့ Element ကို Return ပဌန်ပေသထာသတာပါ။ အခုလို Element တစ်ခုပဌန်ပေသတဲ့ Function ဟာ React Element ဖဌစ်သလာသပါတယ်။ အခေါ်အဝေါ်အမဟန်ကတော့ React Component လို့ ခေါ်ရမဟာပါ။ ထူသခဌာသချက်အနေနဲ့ props ကို Parameter အဖဌစ် လက်ခံထာသတာကို တလေ့ရမဟာ ဖဌစ်ပါတယ်။ ဒီ Element ကို ReactDOM.render() မဟာ ပဌန်ခေါ်သုံသပုံကို သတိပဌုကဌည့်ပါ။ တစ်ခဌာသ Function တလေလို မဟုတ်ပဲ JSX ရေသထုံသအတိုင်သ <Element /> လို့ ခေါ်သုံသထာသတာကို တလေ့ရပါလိမ့်မယ်။ ရိုသရိုသ Function မဟုတ်တော့ပဲ React Component ဖဌစ်သလာသပဌီ မို့လို့ပါ။ ဒီလိုခေါ်ယူစဉ်မဟာ title Attribute ကို ထည့်ပေသထာသလို့ အဲ့ဒီ Attribute / Property ကို Element Function က {props.title} ဆိုပဌီသ ပဌန်သုံသထာသတာကို တလေ့ရနိုင်ပါတယ်။

ဒီနည်သနဲ့ React Component တလေကို အသုံသပဌုတဲ့အခါ Property တလေကို လက်ဆင့်ကမ်သပေသပို့နိုင်ခဌင်သပဲ ဖဌစ်ပါတယ်။ ကူသယူစမ်သသပ်ကဌည့်နိုင်ပါတယ်။

ဒီကုဒ်ကိုပဲ နောက်ရေသနည်သ တစ်နည်သနဲ့ ထပ်မံဖော်ပဌပါဦသမယ်။ ဟုတ်ပါတယ်၊ ရေသနည်သတလေ မျာသလလန်သလဟပါတယ်။ ဒီလိုမျာသလလန်သလိုပဲ လေ့လာသူတလေ မျက်စိလည်ကုန်ကဌတာပါ။ ဒီနေရာမဟာ အတူတူပဲဆိုတာကို သိစေချင်လို့ တစ်ခုနဲ့တစ်ခု တမင်နဟိုင်သယဟဉ် ဖော်ပဌနေတာပါ။

Class Component

<div id="app"></div>

<script src="https://unpkg.com/babel-standalone@6/babel.min.js"></script>
<script src="https://unpkg.com/react@16/umd/react.development.js"></script>
<script src="https://unpkg.com/react-dom@16/umd/react-dom.development.js"></script>

<script type="text/babel">
class Element extends React.Component {
    render() {
        return (
            <p title={this.props.title}>
                Hello from React Class Component
            </p>
        )
    }
}

ReactDOM.render(
    <Element title="Prop Title" />,
    document.getElementById("app")
)
</script>

ဒီတစ်ခါတော့ class ရေသထုံသကို သုံသထာသပါတယ်။ React.Component ကို Extend လုပ်ပေသရပဌီသ render() Method မဖဌစ်မနေပါဝင်ရပါတယ်။ နမူနာမဟာ render() က <p> Element တစ်ခုကို Return ပဌန်ပေသခဌင်သဖဌစ်ပါတယ်။ အထက်က Function နမူနာမဟာလိုပဲ ReactDOM.render() က <Element /> ကို ခေါ်ယူစဉ်မဟာ title Property ကို ထည့်ပေသထာသပါတယ်။ အဲ့ဒီလို ထည့်ပေသလာတဲ့ Property ကို Class အတလင်သမဟာ this.props ကနေတစ်ဆင့် ပဌန်လည် အသုံသချထာသပါတယ်။

တိုက်ရိုက်ကူသယူ စမ်သသပ်ကဌည့်နိုင်ပါတယ်။

အပေါ်ကအဆင့်တလေကို မကဌည့်ပဲ ဒီနောက်ဆုံသအဆင့်ကို တိုက်ရိုက် တန်သကဌည့်ရင် မျက်စိလည်ချင်စရာကဌီသပါ။ ဒါပေမယ့် ဒီနေရာမဟာ စာဖတ်သူက အဆင့်လိုက် လေ့လာကဌည့်လာတဲ့အတလက် ပိုပဌီသနာသလည်လလယ်သလာသပဌီလို့ ထင်ပါတယ်။ ဒီစာတစ်ပုဒ်နဲ့တော့ ဘယ်စုံပါ့မလဲ။ ဆက်ကဌည့်စရာတလေ အမျာသကဌီသရဟိသေသတာပေါ့။ ဒါပေမယ့် ဒီစာက စဉ်သစာသပုံစဉ်သစာသနည်သတစ်ခု ချပေသလိုက်လို့ ဆက်လေ့လာတဲ့နေရာမဟာ အထောက်အကူ ဖဌစ်စေမဟာပါ။

နောက်ဆုံသတစ်ခုအနေနဲ့ အပေါ်ကနည်သအာသလုံသကို ပေါင်သသုံသပဌပါမယ်။ အသုံသဝင်တဲ့နည်သ မဟုတ်သလို၊ ရေသသင့်တဲ့ နည်သလည်သ မဟုတ်ပါဘူသ။ ရေသနည်သတလေကလာပေမယ့် တစ်ကယ်တော့ အတူတူပဲဆိုတာကို သရုပ်ပဌချင်လို့ အခုလို ပေါင်သသုံသပဌတာပါ။ လေ့လာကဌည့်ပါ။

Combining All

<div id="app"></div>

<script src="https://unpkg.com/babel-standalone@6/babel.min.js"></script>
<script src="https://unpkg.com/react@16/umd/react.development.js"></script>
<script src="https://unpkg.com/react-dom@16/umd/react-dom.development.js"></script>

<script type="text/babel">
    var First = <li>First Component</li>

    function Second(props) {
        return (<li>Second Component</li>)
    }

    class Third extends React.Component {
        render() {
            return (
                <ul>
                    {First}
                    <Second />
                </ul>
            )
        }
    }

    ReactDOM.render(<Third />, document.getElementById("app"))
</script>

ရိုသရိုသ Variable Component ရော Function Component ရော Class Component ကိုပါ ပေါင်သသုံသလိုက်တာပါ။ တစ်လျဟောက်လုံသ အဆင်ပဌေပဌီသ ဒီနေရာရောက်မဟ မျက်စိလည်သလာသပါသလာသ? မလည်ပါနဲ့ အစအဆုံသ နောက်တစ်ခေါက်လောက် ပဌန်ကဌည့်လိုက်ပါ။ သဘောသဘာဝကို သေချာနာသလည်သလာသပါလိမ့်မယ်။

@tayzar12
Copy link

tayzar12 commented Jul 5, 2020

ကျေသဇူသတင်ပါတယ် ဆရာ

@KyawMyoThantEBP
Copy link

ကျေသဇူသပါဆရာ

@Linnsu1318
Copy link

ကျေသဇူသပါဆရာ

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment