state, props, 리렌더링

김영진·2022년 7월 27일
0

TIL

목록 보기
18/29
post-thumbnail

state란?

props와 state는 일반 자바스트립트 객체이다. 두 객체 모두 렌더링에 영향을 주는 정보를 갖고 있는데, 한 가지 중요한 방식에서 차이가 있다. props는 컴포넌트에 전달되는 반면 state는 컴포넌트 안에서 관리된다.

그러므로 컴포넌트 내부에서 변경하고 싶은 값이 있을 때, state를 활용하면 된다.

함수형 컴포넌트의 state

const App = () => {
  const [state, setState] = useState("초기값");
}

배열 비구조화 할당 문법으로, useState 함수를 호출할 시 배열이 반환되고, 배열이 첫 번째 원소는 현재 상태, 두 번째 원소는 상태를 바꾸어 주는 함수가 된다.

즉 state는 현재 state의 상태가 저장되고, setState는 state를 바꾸어 주는 setter 함수가 된다.


props란?

자식 컴포넌트에게 값을 전달해줘야 할 때, props를 사용한다.

props 기본 사용법

import React from 'react';
import Hello from './Hello';

function App() {
  return (
    <Hello name="react" />
  );
}

export default App;
  • 부모 컴포넌트에서 자식 컴포넌트로 값을 전달해주고 싶을 때, 자식 컴포넌트 태그에 전달할 값의 이름과 값을 전달해준다. 문자열, 함수, 변수 등을 모두 자식 컴포넌트에 보낼 수 있다.

그럼 자식 컴포넌트에서 값을 받을 땐 어떻게 해야할까?

import React from 'react';

function Hello(props) {
  return <div>안녕하세요 {props.name}</div>
}

export default Hello;
  • 자식 컴포넌트 함수의 인수값을 props로 받는다. props는 객체 형태로 전달 되며 name값을 조회하고 싶다면 props.name을 조회하면 된다.

여러개의 props

import React from 'react';
import Hello from './Hello';

function App() {
  return (
    <Hello name="react" color="red"/>
  );
}

export default App;
  • 여러개의 props를 전달할 수 있다.
import React from 'react';

function Hello(props) {
  return <div style={{ color: props.color }}>안녕하세요 {props.name}</div>
}

export default Hello;

비구조화 할당(구조 분해)

import React from 'react';

function Hello({ color, name }) {
  return <div style={{ color }}>안녕하세요 {name}</div>
}

export default Hello;

props 내부의 값을 조회할 때마다 props.를 쓰는게 싫다면, 파라미터에서 비구조화 할당 문법을 사용해 props값을 주고 받을 수 있다.

props.children

import React from 'react';

function Wrapper({ children }) {
  const style = {
    border: '2px solid black',
    padding: '16px',
  };
  return (
    <div style={style}>
      {children}
    </div>
  )
}

export default Wrapper;
import React from 'react';
import Hello from './Hello';
import Wrapper from './Wrapper';

function App() {
  return (
    <Wrapper>
      <Hello name="react" color="red"/>
      <Hello color="pink"/>
    </Wrapper>
  );
}

export default App;
  • 컴포넌트 태그 사이에 넣은 값을 조회하고 싶을 땐, props.children을 조회하면 된다.

리렌더링

state의 변경

리액트에서는 유동적인 데이터를 저장하기 위해 state라는 것을 사용하는데, 이때 값을 바꿔주기 위해서는 state를 직접 바꾸는 것이 아니라 setState 함수를 써야한다.

state의 변경이 감지되면 리액트는 리렌더링을 한다.

새로운 props

전달받은 props 값이 업데이트 됐다면 리렌더링 된다.

부모 컴포넌트의 렌더링

새로운 props가 들어오지 않더라도 부모컴포넌트가 리렌더링 되면 자식컴포넌트 역시 리렌더링이 된다.


강의 출처 - 벨로퍼트와 함께하는 모던 리액트

profile
노션 및 티스토리로 이동 예정입니다.

0개의 댓글