# useState 실습2

tofu·2023년 7월 17일
0

React

목록 보기
7/26

그럼 이제 input에 입력한 값이 목록에 보이도록, 삽입, 삭제도 가능하도록 해보자!

1] 우선 입력을 하면 화면에 나타나야 하니까 한 배열을 만들자.

//App.js

  const [users, setUsers] = useState([
    { id: 1, email: "hero@naver.com", age: "30" },
    { id: 2, email: "james@naver.com", age: "31" },
    { id: 3, email: "curry@naver.com", age: "32" },
    { id: 4, email: "tom@naver.com", age: "33" },
  ]);

2] props로 users, 삭제 메소드를 넘겨주자.

   <UserList users={users} onRemoveUser={onRemoveUser} />

3] UserList.js라는 파일을 만들자.

//UserList.js
const User=({user,onRemoveUser})=>{
  return(
    <ul>
      <li>
        {user.email}({user.age}) 
        <button onClick=() => {
                onRemoveUser(user.id);
        }>삭제</button></li>
        

User에 user,onRemoveUser를 파라미터로 받아와
화면에 email,age가 뜨도록 한다.

그다음, map함수를 사용해 값을 변환할 수 있게 하자.

이때 key값이 있어야 오류가 안뜨는데, 이때 이 key 값에는 유니크한 값을 넣어줘야한다. 처음엔 ke={index}로 했었는데,배열은 유동적이기에 index보단 id로 쓰는 것이 좋다!

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

4]onRemoveUser 메소드 정의하자

삭제 기능은
filter함수를 사용해 내가 삭제하고자 하는 목록의 id와 기존의 id가 같지 않는 값들로만 이루어져 있으면 된다.

//App.js
const onRemoveUser = (id) => {
    setUsers((users) => users.filter((user) => user.id !== id));
  };

그럼 setUsers에 새로운 값들로 변경되므로 삭제버튼을 누르면 삭제되는 걸 확인 할 수있다!

5] 추가 기능 구현하자
input 태그 옆에 추가버튼을 누르면 목록에 추가되게 할 것이다.

onAddUser() 메소드를 생성.

const onAddUser=()=>{
  const newUser={id:nextId.current,email,age};
    setUsers([...users,newUser]);
    setInputs({
      email:'',
      age:''
    })
  }

id를 특정 숫자로 지정해줄 수 없으니까, nextId라는 변수를 사용해 지정해주자.

이렇게 컴포넌트 안에서 변수를 사용하고 싶을때
useRef라는 Hook 함수를 사용할 수 있다.
이 함수는 특정 DOM을 선택하고 싶을때도 사용한다.

const nextId=useRef(5);

이런식으로 위에 선언하면 된다.
이때도 스프레드(...)연산자를 통해 기존배열에 newUser라는 새로운 값들이 저장된다!

6] 특정 DOM focus 해주기
버튼을 누르고 input값이 초기화 되거나 email 태그가 자동으로 focus되게 하려면?
위에서 말했듯이 useRef 함수를 사용한다!

const nameInputRef=useRef();

const onAddUser=()=>{
   ---생략---
   nameInputRef.current.focus();
   nextId.current+=1;
}
 

그럼 이렇게 내가 입력한대로 값이 추가가 된다!!
useState 개념을 살펴보고 응용하면서 생각보다 재밌으면서도 은근 복잡했다.. props로 부모 컴포넌트에서 하위 컴포넌트로 속성명 지정해서 하는게 은근 헷갈려서 계속 생각해야했다..
하지만 연습 만이 답인 듯 하다.

profile
치열해지자

1개의 댓글

comment-user-thumbnail
2023년 7월 17일

많은 도움이 되었습니다, 감사합니다.

답글 달기

관련 채용 정보