ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 29일차 (props & state)
    코드스테이츠 2022. 11. 29. 21:58

    오늘은 props와 state를 공부하며 과제를 진행했다. 전보다 컴포넌트를 세분화하고 컴포넌트끼리 데이터를 주고받으며 컴포넌트 안에서 값을 바꾸는 것을 배웠다. 아직까진 공부하면서 벅찬다기보단 재미가 조금 있는 것 같다. 구현을 못하고 있다가 구현이 되면 이 성공했다는 기분이 좋다. 이 기분 계속 가져가고 싶다.

     

    props

    • 컴포넌트의 속성이며 변하지 않는 값이다. 컴포넌트 외부에서 값을 전달받는다.
    • 부모 컴포넌트(상위 컴포넌트)로부터 전달받은 값이다.
    • 어떤 타입이라도 값을 전달하기위해 객체의 형태를 가진다.
    • 외부에서 전달받고 변하지 않는 값이기 때문에 읽기 전용 객체이다. (읽기 전용이 아니라면 전달받은 값을 하위 컴포넌트에서 수정 시 값을 전달해준 상위 컴포넌트의 값도 바뀌기 때문에 개발자가 의도하지 않은 side effect가 생길 수 있다.)

     

    props를 사용하는 방법

    • 상위 컴포넌트 안에 있는 하위 컴포넌트에 전달하고자 하는 값과 속성을 정의한다.
    •  하위 컴포넌트에 전달받은 값 렌더링한다.
    // 상위 컴포넌트
    function Parent() { 
      return (
        <div className="parent">
          <h1>I'm the parent</h1>
          <Child text={'I'm the children'}/> // 하위 컴포넌트에게 text키와 값을 전달
        </div>
      );
    };
    // 하위 컴포넌트 
    function Child({text}) { // 구조분해할당으로 바로 값을 받아온다
      return (
        <div className="child">{text}</div> // 'I'm the children'
      );
    };

     

    state

    해당 컴포넌트 내에서 바뀔 수 있는 값을 의미하며 모든 변동되는 값은 state로 관리한다.

     

    useState

    • state를 다루는 stake hook 중 하나이다.
    • 사용하려면 import 키워드를 사용하여 React로부터 useState를 불러와야 한다.
    import { useState } from "react";
    • useState를 컴포넌트 안에서 호출하며 useState의 리턴 값을 구조 분해 할당을 변수에 한다. (변수의 이름은 상관없다.)
    const [state 저장 변수, state 갱신 함수] = useState(상태 초기 값);
    • useState를 호출하면 배열을 반환하는데, 배열의 0번째 요소는 현재 state 변수이고, 1번째 요소는 이 변수를 갱신할 수 있는 함수이다.
    • 일반적인 변수를 함수 안에서 선언하면 함수가 끝나게 되면 사라지지만 state변수는 React에 의해 함수가 끝나도 사라지지 않는다.
    • state 변수에 저장된 값을 사용하려면 JSX 엘리먼트 안에 직접 불러서 사용하면 된다.
    <div value = {state 저장 변수}/>

     

    state 갱신하기

    • state를 갱신하려면 state 변수를 갱신할 수 있는 함수인 setIsChecked를 호출하면 된다.
    state 갱신 함수(갱신할 값)

     

    주의점

    • React 컴포넌트는 state가 변경되면 새롭게 호출되고, 리 렌더링 된다.
    • React state는 상태 변경 함수 호출로 변경해야 합니다. 강제로 변경을 시도하면 리 렌더링이 되지 않는다거나, state가 제대로 변경되지 않는다.

    '코드스테이츠' 카테고리의 다른 글

    28일차 (React SPA)  (0) 2022.11.28
    27일차 (React intro)  (0) 2022.11.25
    26일차~(async and promise 과제)  (0) 2022.11.24
    25일 차~  (1) 2022.11.23
    24일차~(비동기)  (0) 2022.11.22
Designed by Tistory.