ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • React Component
    Front-End/React 2024. 8. 30. 21:38
    728x90
    반응형

    React Component

     

     

    오늘도 먼저 잠깐 코드 작성 시 주의점을 살펴보고 가자.

    우리가 지금 return 문 안의 소괄호 안에 HTML 태그를 사용 중인데,

    반드시 하나의 HTML 태그만 시작되고 끝나야 한다.

    아래와 같은 경우는 허용하지 않는다.

    return (
        <div></div>
        <div></div>
        <div></div>
        <div></div>
    );

    위 처럼 하려면, 4개의 div 태그를 감싸는 큰 div 태그를 만들고 그 안에 집어넣어야 한다.

     

    이제 Component를 사용하는 것을 보자.

     

     

    1. 사용법

    function Example() {
        return (
          <div></div>
        );
    }
    

    위와 같이 선언하고, 아래 처럼 사용한다.

        //...~~
        <Example></Example>
    </div>

    이러면 리턴문에 있는 값이 내가 컴포넌트를 사용 중인 곳에 반환된다.

     

    그리고 여러개의 태그가 나열될 때, 전체를 묶는 태그를 fragment 문법으로 작성하면, 그냥 <></>만 쓰면 된다.

    return (
        <>
            <div></div>
        </>
    );

     

    그리고 컴포넌트도 화살표 함수를 지원한다.

    const temp = () => {
        return (
            <div></div>
        );
    }

     

     

    2. 사용시 주의점

    컴포넌트의 첫 글자는 대문자로 시작한다.

    소문자로 할 경우 렌더링이 제대로 되지 않는다.

     

    새 컴포넌트를 만들 때 function App()과 동등하게 만들면 된다.

    생긴거만 봐도 알겠지만 당연히 App()도 하나의 컴포넌트다.

     

    객체지향이랑 비슷한 느낌이었는데, 찾아보니 그 정도는 아니지만 얼추 비슷한 게 맞다고 한다.

     

     

     

    3. 사용처

    그렇다면 어떤 것들을 component로 만들면 좋을까??

     

    1. 반복해서 사용되는 HTML

    2. 자주 바뀌는 HTML UI

     

     

     

    4. 단점

    유용해 보이는 component도 당연히 단점이 있다.

    state를 사용하려고 할 때, state의 스코프 때문에 문제가 생긴다.

     

     

    예시

    let [글제목, 글제목변경] = useState(['8월 20일 노트', '8월 21일 노트', '8월 22일 노트']);

    지금 이 state는 App에서 선언되었다.

     

    function Example() {
        return (
          <div></div>
        );
    }

    따라서 이 컴포넌트에서 글제목을 사용하려고 하면 당연히 사용이 안된다.

     

    상위 컴포넌트에서 만든 state를 이용하려면 props 문법을 사용해야 한다.

    728x90
    반응형

    'Front-End > React' 카테고리의 다른 글

    React 더미 데이터 생성, map() 반복  (2) 2024.08.31
    React 각 컴포넌트 별 CSS 적용  (0) 2024.08.31
    React 이벤트 리스너(핸들러)  (0) 2024.08.30
    React state란?  (0) 2024.08.29
    React 기본 지식  (1) 2024.08.29
Designed by Tistory.