ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • props
    React 2022. 12. 19. 21:26

    props

    • 부모 컴포넌트 로부터 받아온 데이터
    • 부모 -> 자식 방향으로만 전달이 가능하다.
    function App() {
      return <GrandFather />;
    }
    
    function GrandFather() {
      return <Mother />;
    }
    
    function Mother() {
      const name = '묭이';
      return <Child />;
    }
    
    function Child() {
      
      return <div>연결 성공</div>;
    }

    위 코드에서 Mother 에 있는 name값을 가져오고 싶으면 아래와 같이 props를 사용하자.

    function App() {
      return <GrandFather />;
    }
    
    function GrandFather() {
      return <Mother />;
    }
    
    function Mother() {
      const name = '묭이';
      return <Child motherName={name} />;
    }
    
    function Child(props) {
      console.log(props);
      return <div>연결 성공</div>;
    }

    console에 props를 찍어보면 결과는 아래와 같다.


    한번 화면에 출력되게 작성해보겠다.

    function App() {
      return <GrandFather />;
    }
    
    function GrandFather() {
      return <Mother />;
    }
    
    function Mother() {
      const name = '묭이';
      return <Child motherName={name} />;
    }
    
    function Child(props) {
      console.log(props);
      return <div>{props.motherName} 연결 성공</div>;
    }
    
    // 출력결과 : 묭이 연결 성공

    이제 GrandFather의 이름을 받아와보겠다.

    function App() {
      return <GrandFather />;
    }
    
    function GrandFather() {
      const name='묭묭이'
      return <Mother grandFatherName={name} />;
    }
    
    function Mother(props) {
      return <Child grandFatherName={props.grandFatherName} />
    }
    
    function Child(props) {
      return <div>{props.grandFatherName} 연결 성공</div>;
    }
      
    // 출력결과 : 묭묭이 연결 성공

    props 구조분해할당으로 받기

    위 코드에서 grandFatherName 은 묭묭이 가 있는 객체로 되어있다.
    아래와 같이 원래는 props가 들어가야 할 자리에 객체로 해당 props객체의 이름을 넣어주고 return쪽에도 props객체의 이름을 넣어준다.

    function App() {
      return <GrandFather />;
    }
    
    function GrandFather() {
      const name='묭묭이'
      return <Mother grandFatherName={name} />;
    }
    
    function Mother(props) {
      return <Child grandFatherName={props.grandFatherName} />
    }
    
    function Child({grandFatherName}) {
      return <div>{grandFatherName} 연결 성공</div>;
    }
      
    // 출력결과 : 묭묭이 연결 성공
    // 이렇게 grandFatherName을 바로 넣어주면 된다.

    children으로 props 받기

    Layout 이라는 컴포넌트를 만들 때 자주 쓰인다.

    function App() {
      return <User>안녕하세요.</User>
    }
    
    function User(props) {
      return <div>{props.children}</div>
    }

    예를들어 레이아웃 컴포넌트를 만들고 그 안에 들어오는 값들은 전부 동일한 스타일을 주고싶다면, 레이아웃 컴포넌트 하나만 작성을 해두고, 그 안에 children으로 값을 주입하면서 레이아웃 컴포넌트를 활용할 수 있다고 한다.
    근데 무슨말인지 잘 모르겠지만 네이버같은경우 연합뉴스나 카드형식의 레이아웃같이 반복되는 스타일을 적용해야되는 때가 오면 children 방식으로 작성한다는 것 같다.


    defaultProps

    • 자주 받거나, 무조건 받아야 하는 props가 있을 경우 사용

    만약 로그인이 완료되기 전까지 내 이름을 받아오지 않는데
    "빈칸 님 안녕하세요!" 이런식으로 되면 매우 어색해질 것 같다.
    이 경우 부모 컴퍼넌트가 props를 주기 전에도, Default props를 지정하여 값을 보여줄 수 있게 된다.
    default props는 child에서 직접 설정해줄 수 있다.

    function Child({ name }) {
      return <div>내 이름은 {name} 입니다. </div>
    }
    Child.defaultProps = {
      name: "기본 이름"
    }

    이런식으로 지정을 해주면, 부모 컴퍼넌트에서 props가 내려오기 전까지는 이 defaultprops의 값을 이용한다.
    (부모컴퍼넌트에서 props가 내려오면 내려온 props의 값으로 대체된다.)

    'React' 카테고리의 다른 글

    컴포넌트, 렌더링, 카운터 만들기  (0) 2022.12.19
    state  (0) 2022.12.19
    JSX  (0) 2022.12.19
    리액트 설치 및 컴포넌트  (0) 2022.12.19
    리액트에서 이미지 추가하기(초간단)  (0) 2022.12.19
Designed by Tistory.