[React] React로 다중 선택 필터 구현하기

chaevivi·2022년 11월 9일
0
post-thumbnail

React로 다중 선택 필터 구현하기

개요

  • '네캔만원' 프로젝트에서 필터링 기능이 필요했다
  • '라거', '에일', 'IPA', '스타우트' 4개의 맥주 종류 버튼을 클릭할 때마다 그 맥주 종류에 해당하는 맥주 리스트들을 보여주는 기능을 구현했다
  • 다중 선택 가능

1. filter 상태를 표현하는 filterState를 모두 false로 설정

const [filterState, setFilterState] = useState({
    passingTags: {
        Lager: false,
        Ale: false,
        IPA: false,
        Stout: false,
    },
 });

2. 해당 필터 버튼을 클릭하면 filterState의 상태를 반대로 바꿔주기 (true -> false, false -> true)

const handleFilter = (e) => {
	const beerType = e.target.id;
    
    setFilterState({
    	passingTags: {...filterState.passingTags, [beerType]: !filterState.passingTags[beerType],},
    });
}

return (
	<div className={container}>
    	<button id="Lager" onClick={handleFilter}>라거</button>
        <button id="Ale" onClick={handleFilter}>에일</button>
        <button id="IPA" onClick={handleFilter}>IPA</button>
        <button id="Stout" onClick={handleFilter}>스타우트</button>
    </div>
);
  • handleFilter 함수 안에 색 바뀌는 코드도 추가해야 함 (생략함)

3. 현재 클릭된 필터 모아주기

const filteredCollect = useCallback(() => {
	const clicked = [];
    const now = filterState.passingTags;
    
    for(let i in now) {
    	if(now[i]) {
        	clicked.push(i); 
        }
    }
    
    return clicked;
}, [filterState.passingTags]);

const result = filteredCollect();
  • useCallback를 사용하여 clicked 라는 배열에 현재 클릭된 필터 모아주기


출처 : https://betterprogramming.pub/creating-a-multi-filter-function-to-filter-out-multiple-attributes-javascript-react-rails-5aad8e272142

profile
직접 만드는 게 좋은 프론트엔드 개발자

0개의 댓글