오늘은 React로 필터 기능을 하는 검색창(Search bar)을 만들어봤다.
이전부터 해보고 싶었던 기능인지라 알고 나니 뿌듯했다.
공부는 유튜버 'Code Commerce' 님의 'React JS의 검색 필터 - 결과 필터링'이라는 글을 참고했다.
(비교적 최근에 업데이트된 리액트 18 버전 이후의 강의들은 좀처럼 찾아보기 힘든지라 해외 글이나 영상, 공식문서에 의존해야 하기에 조금 힘든 것 같다 ㅜ..)
핵심 기능
- array.filter() + array.map()
- onClick event
이번 작업 역시 repl.it을 이용
기본 마크업 + 스타일링은 react-bootstrap을 이용했다.
array 자료는 https://www.mockaroo.com/ 를 이용. 자신이 원하는 랜덤객체 및 배열을 원하는 개수만큼 뱉어주는 사이트.
이번 강의를 통해 알게 된 사이트인데 로그인도 필요 없고, 완전 유용한 것 같다.
import { useState } from 'react'
import { Table, InputGroup, Form } from 'react-bootstrap'
import { data } from './data.js';
import './App.css';
export default function App() {
const [search, setSearch] = useState('');
return (
<div className="App">
<InputGroup className="mb-3">
<Form.Control onChange={(e)=>setSearch(e.target.value)} placeholder="Search any user name"/>
</InputGroup>
<h1 className='text-center mt-4'>React Search Bar Practice</h1 >
<Table striped bordered hover variant="dark">
<thead>
<tr>
<th>First Name</th>
<th>Last Name</th>
<th>E-mail</th>
<th>Gender</th>
<th>Phone</th>
</tr>
</thead>
<tbody>
{
data.filter((i) => {
return search.toLowerCase() === '' ? i : i.first_name.toLowerCase().includes(search);
}).map((item) => {
return (
<tr key={item.id}>
<td>{item.first_name}</td>
<td>{item.last_name}</td>
<td>{item.email}</td>
<td>{item.gender}</td>
<td>{item.phone}</td>
</tr>
)
})
}
</tbody>
</Table>
</div>
)
}
React 코드
- mockaroo에서 받아 온 데이터를 data.js 파일에 복사 붙여 넣기
- data.js 데이터 import 후 map 함수로 화면에 뿌려주기
- 사용자가 입력한 값 받아오기 => searchbar에 onClick 이벤트 추가, e.target.value 값을 search라는 state에 저장
- 사용자가 입력한 값에 따라 filter함수를 통해 값 걸러내기
{
data.filter((i) => {
return search.toLowerCase() === '' ? i : i.first_name.toLowerCase().includes(search);
}).map((item) => {
return (
<tr key={item.id}>
<td>{item.first_name}</td>
<td>{item.last_name}</td>
<td>{item.email}</td>
<td>{item.gender}</td>
<td>{item.phone}</td>
</tr>
)
})
}
- data.filter()를 통해 어떠한 값을 걸러낼 것
- 걸러낼 값 => 사용자가 입력한 값을 소문자화 한 값이 ' ' 빈 문자열이라면 ( (search.toLowerCase()) === ' ' )배열 내 모든 아이템을 ( ? i )
- ' ' 빈 문자열이 아니라면 data 배열을 순회하며 각 아이템의 first_name의 값을 소문자화 한 후에 그 값이 search 값에 포함이 되는지 확인 ( : i.first_name.toLowerCase().includes(search) )
- 걸러낼 값을 토대로 map 함수를 통해 화면에 뿌려주기.( .map(item) => ... )
이번 프로젝트는 생각한 것보다 로직이 간단해서 의외였다.
반대로 Code Commerce라는 새로운 선생님도 만날 수 있었고, 예전부터 궁금했던 기능을 배울 수 있어서 뿌듯함은 컸다.
'코딩 리뷰 > [React]' 카테고리의 다른 글
[React] 포트폴리오 만들기 (0) | 2023.09.13 |
---|---|
[React] 영화 목록 + 검색기능 (0) | 2023.05.30 |
[React] OpenWeatherMap API를 이용한 날씨앱 만들기 리뷰 (0) | 2023.05.22 |
[React] 간단한 카카오 굿즈샵 만들기 리뷰2 (0) | 2023.04.21 |
[React] 간단한 카카오 굿즈샵 만들기 리뷰 (0) | 2023.04.20 |