React
[React] useEffect 사용하여 검색하기
carrotdy
2022. 7. 17. 22:04
useEffect( () => {
setData(user.filter(item => item.name.includes(text)))
},[text])
user의 데이터를 filter하여 text에서 일치하는 검색어를 보여준다. -> (원본에서 검색)
user가 아니라 data로 filter를 하게 된다면, 원본에서 검색하는 것이 아니라 data안에서 검색하는거라
처음에만 일치하는 데이터가 나오고 두번째부터는 일치하는 데이터가 나오지 않는다!!!
import React, { useEffect, useState } from 'react';
const user = [
{ id:1 , name: '이나영'},
{ id:2 , name: '김태희'},
{ id:3 , name: '다음'},
{ id:4 , name: '네이버'},
{ id:5 , name: 'daum'},
{ id:6 , name: 'Naver'},
{ id:7 , name: 'GOOGLE'},
{ id:8 , name: '김다미'},
{ id:9 , name: '다람쥐'},
{ id:10 , name: 'TIGER'},
{ id:11 , name: '홍대'},
{ id:12 , name: '강남'},
{ id:13 , name: '영등포'},
]
const Test = () => {
const [data, setData] = useState(user)
const [text, setText] = useState('')
useEffect( () => {
setData(user.filter(item => item.name.toLowerCase().includes(text.toLowerCase())))
},[text])
return (
<div>
<input type="text" value={text}
onChange={ e => setText(e.target.value)} />
<hr />
<ul>
{
data.map(item => <li key={item.id}>
{item.id} / {item.name}
</li>)
}
</ul>
</div>
);
};
export default Test;
toLowerCate는 자바스크립트 문법인데
데이터를 모두 소문자로 변환시켜 일치하는 데이터가 나올 수 있도록 해준다.
반응형