본문 바로가기
개발(라이브러리,프레임워크)/react.js & react native

컴포넌트

by zieunee 2021. 9. 24.
반응형

 

class 컴포넌트

<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="utf-8" />
        <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
        <meta http-equiv="X-UA-Compatible" content="ie=edge" />
        <title>example</title>
    </head>
    <body>
        <div id ="root"></div>
        <script crossorigin src="https://unpkg.com/react@17/umd/react.development.js"></script>
        <script crossorigin src="https://unpkg.com/react-dom@17/umd/react-dom.development.js"></script>
        <script src="https://cdnjs.cloudflare.com/ajax/libs/babel-standalone/6.26.0/babel.min.js" integrity="sha512-kp7YHLxuJDJcOzStgd6vtpxr4ZU9kjn77e6dBsivSz+pUuAuMlE2UTdKB7jjsWT84qbS8kdCWHPETnP/ctrFsA==" crossorigin="anonymous" referrerpolicy="no-referrer"></script>
        <script type="text/babel">
  
        class Component extends React.Component{
        render() {
            return (
                 return <div>hello</div>;
                ); 
            }
        }

        ReactDOM.render(
        <Component /> , document.querySelector("#root")
        )
            
        </script>
    </body>
</html>

function 컴포넌트

//정의 1 
function FunctionComponent(){
    return <div>hello</div>;
}

// 사용
ReactDOM.render(<FunctionComponent />,  document.querySelector("#root"))
//정의 2
const FunctionComponent = () => <div>Hello</div>;

// 사용 2               
ReactDOM.render(<FunctionComponent />,  document.querySelector("#root"))

React.createElement로 컴포넌트 만들기

// React.createElement(
//     type, //태그 이름 문자열 | 리엑트 컴포넌트 | React.Fragment
//     [props], //리엑트 컴포넌트에 넣어주는 데이터 객체 
//     [...children] //자식으로 넣어주는 요소들
// );

// 1. 태그 이름 문자열 type 
ReactDOM.render(
    React.createElement('h1', null, `type 이 "태그이름 문자열" 입니다.`) ,
    document.querySelector('#root')
);


//2. 리액트 컴포넌트 type 
const Component = () => {
    return React.createElement('p', null, `type 이 "React 컴포넌트" 입니다.`)
}
//(Component, null, null) 의미는 <Component> </Component> 는 <Component /> 와 같다.
ReactDOM.render(
    React.createElement(Component, null, null),
    document.querySelector('#root')
);


//3. React.Fragment
// 태그가 없음 
ReactDOM.render(
    React.createElement(React.Fragment, null, `type 이 "React Fragment" 입니다.`),
    document.querySelector('#root')
); 



//4. 복잡한 리액트 엘리먼트 모임 
// <h1> 안녕하세요 </h1>
// <div><div> <h1>주제<h1> </div>....<li> </li> ... </div> 이런거.. 복잡하면 어떻게해? 복잡해!!
// jsx 사용 
// 우리가 작성한 어떤 코드를 => 순수하게 실행할 수 있는 자바스크립트가 필요하다.
// babel CDN 추가하면 자동으로 변환해준다. 
ReactDOM.render(
    <div>
        <div>
            <h1>주제</h1>
            <ul>
                <li>React</li>
                <li>Vue</li> 
            </ul>
        </div>
    </div>,
    document.querySelector('#root')
);

왜 JSX를 쓰냐

  • React.createElement vs jsx 중에 가독성이 더 좋다.
  • babel 과 같이 컴파일 과정에서 문법적 오류를 인지하기 더 쉽다.

JSX문법

  • 최상위 요소는 1개
  • 최상위 요소 리턴의 경우 , () 로 감싸야한다.
  • 자식들은 바로 렌더링하고 싶으면 <> </>를 사용한다. => Fragment
  • 자바스크립트 표현식을 사용하려면, {표현식}을 이용한다.
  • if문은 사용할 수 없음/ 삼항연산자 or && 사용
  • style을 이용해 인라인스타일링 가능
  • class 대신 className 사용해 class적용
  • 자식요소가 있음 </> 꼭 닫아야한다.
반응형

'개발(라이브러리,프레임워크) > react.js & react native' 카테고리의 다른 글

Hooks  (0) 2022.01.09
라우팅  (0) 2021.09.26
라이프사이클  (0) 2021.09.23
props 와 state  (0) 2021.09.23
Firebase 연동  (0) 2021.07.01