Framework & Library/React

React 기초 - useState 함수

임빈영 2021. 9. 22. 18:13

useState 함수의 사용 이유

function App() {
  let number = 1;

  const add = () => {
    number++;
    console.log(number);
  };

  return (
    <div>
      <h1> 숫자 : {number}</h1> <button onClick={add}>더하기</button>
    </div>
  );
}

export default App;

리액트는 일반적인 변수의 변경에는 렌더링이 되지 않는다. 따라서, 화면상에서는 number의 값이 1로 계속 유지된다.

 

function App() {
  const [number, setNumber] = useState(1);

  const add = () => {
    setNumber(number + 1);
    console.log(number);
  };

  return (
    <div>
      <h1> 숫자 : {number}</h1> <button onClick={add}>더하기</button>
    </div>
  );
}

export default App;

리액트 내의 hooks 라이브러리를 이용해 상태 변수를 선언함으로써 위 문제를 해결한다.

useState() 함수를 이용해 number를 상태 변수로 만든다.

setNumber를 이용해서 상태 변수의 값을 변경할 때마다 화면상에서 number의 값은 1씩 증가한다.


렌더링의 조건

function App() {
  console.log('App 실행됨');

  const [users, setUsers] = useState([
    { id: 1, name: '홍길동' },
    { id: 2, name: '임꺽정' },
    { id: 3, name: '이순신' },
    { id: 4, name: '장보고' },
  ]);

  const download = () => {
    let sample = [
      { id: 1, name: '홍길동' },
      { id: 2, name: '임꺽정' },
      { id: 3, name: '이순신' },
      { id: 4, name: '장보고' },
    ];
    setUsers(sample);
  };

  return (
    <div>
      <button onClick={download}>다운로드</button>
      {users.map((user) => (
        <h1>
          {user.id}, {user.name}
        </h1>
      ))}
    </div>
  );
}

export default App;

users의 상태 변수의 값과 sample의 데이터가 동일해도 레퍼런스가 다르기 때문에 다운로드 버튼을 눌렀을 때 다시 렌더링 된다.

 

function App() {
  console.log('App 실행됨');

  let sample = [
    { id: 1, name: '홍길동' },
    { id: 2, name: '임꺽정' },
    { id: 3, name: '이순신' },
    { id: 4, name: '장보고' },
  ];

  const [users, setUsers] = useState(sample);

  const download = () => {
    sample.push({ id: 5, name: '강감찬' });
    setUsers(sample);
  };

  return (
    <div>
      <button onClick={download}>다운로드</button>
      {users.map((user) => (
        <h1>
          {user.id}, {user.name}
        </h1>
      ))}
    </div>
  );
}

export default App;

sample의 값이 push에 의해서 변경되어도 sample의 레퍼런스와 users의 레퍼런스가 동일하기 때문에 렌더링이 되지 않는다.

결국 리액트는 상태 변수 값의 변경과 함께 레퍼런스도 변경이 되어야 렌더링이 된다.


 

GitHub - qlsdud0604/react-basic: 리액트의 기초를 학습하는 공간

리액트의 기초를 학습하는 공간. Contribute to qlsdud0604/react-basic development by creating an account on GitHub.

github.com

 

728x90