본문 바로가기
Front-End Study/React.js

State

by 코딩기 2024. 2. 15.
728x90

지속적으로 변화하는 값(컴포넌트 내에서 변화를 주도)

import { useState } from 'react';

export default function Body(){

  const [Light, setLight] = useState('OFF'); // 새로운 State 생성, 문자열"OFF"생성(초기값)
  // Light = state 값, setLight = 상태변화함수(state 값의 변화)
  return(
    <div className="body">
      <h1>body</h1>
      {Light}
      <button
      onClick={() => {
        setLight("ON"); // 상태변화함수 호출 후, state값의 문자열 변경(인수 전달)
      }}
      >켜기</button>
      <button
      onClick={() => {
        setLight("OFF"); // 위와 동일
      }}
      >끄기</button>
    </div> 
}

-> 이렇게 값이 변경 가능한 이유 : 리액트가 컴포넌트의 값이 바뀔 때마다 렌더링을 다시하기 때문
-> 반대로 리액트의 RE렌더링 조건은 컴포넌트 내의 State값이 변경되었을 경우에 한정

State & Props

Props 문법을 통해 State 값을 컴포넌트로 내려보내는 것 또한 가능

// State 값을 매개변수로 전달받아 조작
function Lightbulb({Light}) {

  return <>
    {Light === 'ON' ? <div style={{backgroundColor:'orange'}}>ON</div> : <div
    style={{backgroundColor:"grey"}}>OFF</div>}
  </>
}

function StaticLightbulb () {
  return <div style={{ backgroundColor: "gray"}}>OFF</div>
}


export default function Body(){

  const [Light, setLight] = useState('OFF'); // 새로운 State 생성 후 문자열 "OFF" 생성(초기값)

  return(
    <div className="body">
      <h1>body</h1>

      <Lightbulb Light={Light} />

      <button
      onClick={() => {
        setLight("ON"); // 상태변화함수 호출 후, state값의 문자열 변경(인수 전달)
      }}
      >켜기</button>
      <button
      onClick={() => {
        setLight("OFF"); // 상태변화함수 호출 후, state값의 문자열 변경(인수 전달)
      }}
      >끄기</button>
    </div> 
  )
}
  • 리액트의 렌더링
    Props로 내려보낸 두 함수 중 StaticLightbulb는 변경되는 값이 없어 렌더링이 되지 않아야 함에도 불구하고 부모가 렌더링 되므로 같이 렌더링 진행

-> 과한 렌더링은 성능 저하를 유발하므로, 렌더링되는 부모 컴포넌트 밑의 렌더링이 필요없는 자식 컴포넌트들은 따로 빼는 등의 처리를 지향(최적화)

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

리액트의 라이프 사이클  (1) 2024.02.17
State로 사용자 입력 관리하기, Ref로 요소 지정하기  (0) 2024.02.15
Event Handling  (0) 2024.02.15
Props  (0) 2024.02.11
JSX 문법  (0) 2024.02.07