JS Library/React

useRef 로 컴포넌트 안의 변수 만들기

원2 2022. 5. 18. 18:43
728x90
반응형

컴포넌트에서 특정 DOM 을 선택해야 할 때 => ref 를 사용

함수형 컴포넌튼에서 이를 설정 할 때 => useRef 사용 설정

 

useRef Hook 은 DOM 을 선택하는 용도 외에도, 다른 용도가 있다!

컴포넌트 안에서 조회 및 수정 할 수 있는 변수를 관리하는 것

 

useRef 로 관리하는 변수는 값이 바뀐다고 해서 컴포넌트가 리렌더링 되지 않는다.

 

리액트 컴포넌트에서의 상태는 상태를 바꾸는 함수를 호출하고 나서 그 다음 렌더링 이후 업데이트 된 상태를 조회 할 수 있지만, useRef 로 관리하고 있는 변수는 설정 후 바로 조회 할 수 있다.

 

이 변수를 사용하여 다음과 같은 값을 관리 할 수 있다.

  • setTimeout, setInterval 을 통해서 만들어진 id
  • 외부 라이브러리를 사용하여 생성된 인스턴스
  • scroll 위치

App 컴포넌트에서 useRef 를 사용하여 변수를 관리해보자

용도는 앞으로 배열에 새 항목을 추가할건데, 새 항목에서 사용 할 고유 id 를 관리하는 용도

 

useRef 를 사용하여 변수를 관리하기 전에 해야 할 작업이 있다

 

이때까지는 UserList 컴포넌트 내부에서 배열을 직접 선언해서 사용을 하고 있는데

UserList 에서 선언해서 사용하는 대신에, 이 배열을 App 에서 선언하고 UserList 에게 props 로 전달을 해보자

 

App.js

 

// import logo from './logo.svg';
import './App.css';
import UsersList from './components/UserList';
import { useRef } from 'react';

function App() {

  const users = [
    {
      id: 1,
      username: 'velopert',
      email: 'public.velopert@example.com'
    },
    {
      id: 2,
      username: 'tester',
      email: 'tester@example.com'
    },
    {
      id: 3,
      username: 'admin',
      email: 'imAdmin@example.com'
    }
  ];

  // useRef() 를 사용할 때 파라미터를 넣어주면, 이 값이 .current 값의 기본값이 된다.
  // 이 값을 수정 할때에는 .current 값을 수정, 조회 할 때에는 .current 를 조회하면 된다. 
  const nextId = useRef(4);
  const onCreate = () => {
    // 나중에 구현 할 배열에 항목 추가하는 로직
    // ...

    nextId.current += 1;

  };

  return <UsersList users={users} />;
}

export default App;

 

UserList.js

import React from 'react';

function User({ user }) {
	return (
		<div>
			<b>{user.username}</b> <span>({user.email})</span>
		</div>
	);
}

function UserList({ users }) {
	return (
		<div>
			{users.map(user => (
				<User user={user} key={user.id} />
			))}
		</div>
	);

}

export default UserList;
728x90
반응형