Array.filter를 이용해 검색창 구현하기 (연습)

YOUNGJOO-YOON·2021년 4월 21일
0

react with webpack 5

목록 보기
10/37
post-custom-banner

TOC

  1. algorithm

  2. 실수한 점

  3. 한 번 더


1. algorithm

정의

  • 검색창에 입력되는 값을 input, DB에서 받아온 값을 users라고 한다.
  1. users.map()을 통해 화면을 그릴 경우 DB에서 전해진 값이 바로 화면에 뿌려지게 된다.

  2. users.map()에서 바로 input 값에 의한 filtering도 가능할 것이다. 예를 들어 users.filter(...).map(...)
    이는 코드가 너무 길어지므로

  3. filter를 따로 분리해 filteredList.map()의 형태로 만들어 주자 filter가 되면 filtered 결과만을 return(!!!중요!!!) 안되면 filter의 반환값으로 넘겨받은 인자를 그대로 돌려준다 (아무것도 filter하지 않는다는 뜻)

(중요)
함수형 component에서 선언한 함수는 렌더링 파트에 들어가게 되면 state에 그냥 접근할 수 없게 된다. 함수 선언시에는 정상적으로 호출이 되지만 render에서는 closer에 막혀 접근이 불가능해지니 인자를 꼭 넘겨주도록 하자

요약:
1. users를 필터링 해준다 =filteredList
2. filteredList.map((v,i)=>({v.id})) 이런 식으로 렌더링 해준다.

2. 실수한 점

  1. 따로 선언한 함수의 closer에 막혀 인자의 전달이 안되었던 점

  2. if의 return을 선언하지 않고 그냥 반환되길 기다린 점! (생략 하려면 그 조건을 지킬 것)


3. 한 번 더

...
  const filteredList = (users, input) => {
    return users.filter((user) => {
      if (input) {
        return user.name.toLowerCase().includes(input.toLowerCase());
      } else {
        return user;
      }
    });
  };
...
...
        {filteredList(users, input).map((v, i) => (
          <tr>
            <td>{v.id}</td>
            <td>{v.name}</td>
            <td>{v.gender}</td>
          </tr>
        ))}
...

총총

어렵지만 구현하는 것은 해냈을 때 상당한 만족감을 준다.

profile
이 블로그의 글은 제 생각을 정리한 글과 인터넷 어딘가에서 배운 것을 정리한 글입니다. 출처는 되도록 남기도록 하겠습니다. 수정 및 건의 오류 등이 있으면 언제든지 댓글 부탁드립니다.
post-custom-banner

0개의 댓글