React 이해를 위한 예제

2023. 9. 14. 12:38카테고리 없음

반응형

노마드 코더를 통해 리액트 재공부중

이해를 위해 주석을 달아 직관적으로 확인하기 위해 기록을 남기기로 함

큰 블럭의 정리는 아래와 같으며,

 

 

펼친 소스는 다음과 같다

<!DOCTYPE html>
<html lang="ko">
<body>
    <div id="root"></div>
</body>
<script src="https://unpkg.com/react@17.0.2/umd/react.production.min.js"></script>
<script src="https://unpkg.com/react-dom@17.0.2/umd/react-dom.production.min.js"></script>
<script src="https://unpkg.com/@babel/standalone/babel.min.js"></script>

<script type="text/babel">

    // conmponent MinutesToHours start
    function MinutesToHours() {
        // props{}  and useStat[value.modifier]
        const [amount,setAmount] = React.useState(0);
        const [invert,setInvert] = React.useState(false);
        
        // fuction Area start
        const onChange = (event) => {
            setAmount(event.target.value);
        }
        const reset = () => setAmount(0);
        const onInvert = () => {
            reset();
            setInvert((current) => !current);
        }
        // fuction Area end
        
    return (
        
        // pseudo-HTML format Area start
        <div>
            <div>
                
                <input
                    value={invert ? amount*60 : amount}
                    id="minutes"
                    placeholder="Minutes"
                    type="number"
                    onChange={onChange}
                    disabled={invert === true} />
                <label htmlfor="minutes"> Minutes</label>
            </div>
            <div>
                <input
                    //value={invert ? amount : Math.round(amount / 60)}
                    value={invert ? amount : (amount / 60).toFixed(1)}
                    id="hours"
                    placeholder="Hours"
                    type="number"
                    onChange={onChange}
                    disabled={invert === false} />
                <label htmlfor="hours"> Hours</label>
            </div>
            <button onClick={reset}>Reset</button>
            <button onClick={onInvert}>{invert ? "Turn back" : "Invert"}</button>
        </div>
        // pseudo-HTML format Area end
        );
    }
    // conmponent MinutesToHours end

    // conmponent KmToMiles start
    function KmToMiles () {
        // props{}  and useStat[value.modifier]
        const [amount1,setAmount1] = React.useState("0");
        const [invert1,setInvert1] = React.useState(false);

        // fuction Area start
        const onChange1 = (event) => {
            console.log(event.target.value);
            setAmount1(event.target.value);
        }
        const reset = () => setAmount1(0);
        const onInvert = () => {
            reset();
            setInvert1((current) => !current);
        }
        // fuction Area end

    return (

        // pseudo-HTML format Area start
        <div>
            <div>
                <input
                    value={invert1 ? amount1*1000 : amount1}
                    id="meters"
                    placeholder="Meters"
                    type="number"
                    onChange={onChange1}
                    disabled={invert1 === true} />
                <label htmlfor="meters"> m</label>
            </div>
            <div>
                <input
                    //value={invert1 ? amount1 : Math.round(amount1 / 1000)}
                    value={invert1 ? amount1 : (amount1 / 1000).toFixed(2)}
                    id="kilo-m"
                    placeholder="kilo-m"
                    type="number"
                    onChange={onChange1}
                    disabled={invert1 === false} />
                <label htmlfor="kilo-m"> km</label>
            </div>
            <button onClick={reset}>Reset</button>
            <button onClick={onInvert}>{invert1 ? "Turn back" : "Invert"}</button>
        </div>
        // pseudo-HTML format Area end
        )
    }
    // conmponent KmToMiles end

    //==============================================================================================
    // React Main handling for render 'div-id:root'
    function App() {
        // props{}  and useStat[value.modifier]
        const [index, setIndex] = React.useState("-1");
        //const [index, setIndex] = React.useState("0");
        
        
        // fuction Area start
        const onSelect = (event) => {
            console.log(event.target.value);
            setIndex(event.target.value);
        }
        // fuction Area end
        
    return (
        
        // pseudo-HTML format Area start
        <div>  
            <h1 class="hi">Super Converter</h1>
            <select value={index} onChange={onSelect}>
                <option value="-1">Select your units</option>
                <option value="0">Minutes & Hours</option>
                <option value="1">Km & Miles</option>
            </select>
            <hr />
            {index === "-1" ? "Please select your units" : null }
            {index === "0" ? <MinutesToHours /> : null }
            {index === "1" ? <KmToMiles /> : null } 
        </div>
        // pseudo-HTML format Area end
    );
    }
    // React Main handling End
    //==============================================================================================
    // React Main Steam render 'div-id:root'
    const root = document.getElementById("root");
    ReactDOM.render(<App />,root);
    // React Main Steam render 'div-id:root'
    //==============================================================================================

</script>
</html>

 

반응형