React JS

React JS - 03

yongyongMom 2023. 8. 18. 12:57
SMALL

1. 반복적으로 사용하는 button 만들기

 - 반복적으로 사용하는 button 함수 Btn 만들기.

 - Btn 함수에 props 를 넘겨줘 Button에 서로 다른 text를 나타낼 수 있음. ex) 'Save Changes', 'Confirm'

<!DOCTYPE html>
<html>
    <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">
    const root = document.getElementById("root");

    function Btn (props) {
        return <button style={{
                backgroundColor :"black",
                color : "white",
                size: "5px",
                borderRadius : "10px",
                margin : "10px"
            
            }}>
            {props.text}
            </button>
       }
    function App() {
        // function SaveBtn() {
        //     return(
        //         <button>Save Button</button>
        //     )
        // }
        // function ConfirmBtn () {
        //     return <button>Confirm</button>
        // }
        return(
            <div>
                <Btn text="Save Changes"/>
                <Btn text="Confirm"/>
            </div>
            
        );
    }

    ReactDOM.render(<App />, root);
</script>
</html>

 

2. 버튼 다시 그리기

 - 버튼 클릭 시 버튼 내부의 text 변경을 할 때 바뀌는 버튼 뿐만 아니라 바뀌지 않는 버튼까지 다시 그림

 - 이는 페이지 반응이 느려지는 원인이 되기 때문에 변하는 부분만 다시 그리도록 작성

 - React.memo 를 이용해 변하지 않는 태그는 기억하고 다시 그리지 않음.

 - props 가 변경되는 부분만 다시 그리고 변경되지 않는 부분은 memo 에서 기억해놓은 태그를 그대로 그림.

<!DOCTYPE html>
<html>
    <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">
    const root = document.getElementById("root");
        
        // function SaveBtn() {
        //     return(
        //         <button>Save Button</button>
        //     )
        // }
        // function ConfirmBtn () {
        //     return <button>Confirm</button>
        // }
       function Btn (props) {
        console.log(props.text, "was rendered");
        return <button style={{
                backgroundColor :"black",
                color : "white",
                size: "5px",
                borderRadius : "10px",
                margin : "10px"
            
            }}
                onClick={props.onClick}>
            {props.text}
            </button>
       }
       const Memorize = React.memo(Btn);
       function App() {
        const [value, setValue] = React.useState("Save Changes");
        const changeValue = () => {
            setValue("Revert Changes");
        }
        return(
            <div>
                <Memorize text={value} onClick={changeValue}/>
                <Memorize text="Confirm"/>
            </div>
            
        );
    }
    ReactDOM.render(<App />, root);

</script>
</html>

3. propType 을 지정하는 방법

 - prop 들도 문자, 숫자 등 특정한 자료형을 받아야 함.

 - 그런데 적절하지 않은 자료형이 입력되더라도 문제가 발생하지 않고 페이지가 로드되는 경우를 방지하고자 prop 타입을 지정함. 

 - [ 태그이름.propTypes = { prop 이름 : PropTypes.자료형, } ] 형태로 사용함. memo 와 같이 사용되지 않음... 왜?

<!DOCTYPE html>
<html>
    <body>
        <div id="root"></div> 
    </body>
<script src="https://unpkg.com/react@17.0.2/umd/react.development.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 src="https://unpkg.com/prop-types@15.7.2/prop-types.js"></script>
<script type="text/babel">
    const root = document.getElementById("root");
        
        // function SaveBtn() {
        //     return(
        //         <button>Save Button</button>
        //     )
        // }
        // function ConfirmBtn () {
        //     return <button>Confirm</button>
        // }
       function Btn (props) {
        
        console.log(props.text, "was rendered");
        return <button style={{
                backgroundColor :"tomato",
                color : "white",
                border : "solid blue 5px",
                borderRadius : 10,
                margin : 10,
                fontSize: props.font
            }}
                onClick={props.onClick}>
            {props.text}
            </button>
       }
    //    const Memorize = React.memo(Btn);
       Btn.propTypes = {
        text : PropTypes.string,
        font : PropTypes.number.isReaquired,
       }
       // propTypes, PropTypes 대소문자 구분이 중요함
       function App() {
        const [value, setValue] = React.useState("Save Changes");
        const changeValue = () => {
            setValue("Revert Changes");
        }
        return(
            <div>
                <Btn text={10} onClick={changeValue} font={30}/>
                <Btn text={"Confirm"} />
            </div>
            
        );
    }
    ReactDOM.render(<App />, root);

</script>
</html>

 

이상으로 기본적인 prop 을 이용하여 반복되는 태그를 효율적으로 사용하는 방법에 대해 정리하였다.

이후부터는 react 프로젝트를 생성하여 component를 나누고 보다 다양한 기능을 만들어 보겠다.

화이띵~

( 영상이나 사진이 코드의 결과라고 보면 된다. )

반응형
LIST