[DAY - 75] pixabay-api

2023. 6. 20. 19:35·🔥 부트캠프-웹 개발 🔥/React
  • pixabay-api

 

pixabay-api

https://pixabay.com/api/docs/

 

Pixabay API Documentation

lang str Language code of the language to be searched in. Accepted values: cs, da, de, en, es, fr, id, it, hu, nl, no, pl, pt, ro, sk, fi, sv, tr, vi, th, bg, ru, el, ja, ko, zh Default: "en" category str Filter results by category. Accepted values: backgr

pixabay.com

 

픽사베이 api를 이용해 데이터를 화면에 출력해 주고 검색기능을 통해 원하는 사진을 출력하게 해 보았다.

 

    useEffect(() => {
        const API_KEY = 'KEY'
        const url = `https://pixabay.com/api/?key=36039320-c68a09919d89ffbf64dc4bb64&q=${keyword}&image_type=photo`
        axios.get(url)
            .then(res => {
                setData(res.data.hits)
                setLoading(true)
                setError(null)
            })
            .catch(error => {
                setData([])
                setLoading(false)
                setError('-- ERROR --')
            })
    }, [keyword])
    const [keyword, setKeyword] = useState('tiger')

 

초기 키워드는 tiger로 설정해 두었다.

 

pixabay

const GallerySearch = ({ onSubmit, changeInput, text }) => {
    return (
        <GallerySearchForm onSubmit={onSubmit}>
            <input className='imput' type='text' value={text} onChange={changeInput} />
            <button className='btn' type='submit'>search</button>
        </GallerySearchForm>
    );
};

export default GallerySearch;

 

form 안에 text를 받는 input을 이용해 value값을 가져와 원하는 키워드로 검색이 가능하게 했다.

onChange가 되면 text의 값을 바꾸어 주고 form을 submit 하면 키워드 값을 text로 바꿔준 뒤 input에는 공백이 들어가게 해 준다.

 

    const onSubmit = (e) => {
        e.preventDefault();
        if (!text) return
        setKeywordArr([
            ...keywordArr,
            {
                id: keywordArr.length + 1,
                text
            }
        ])
        setKeyword(text)
        setText('')
    }
    const changeInput = (e) => {
        setText(e.target.value)
    }

 

setKeywordArr의 경우 검색 내역을 남기기 위해 추가했는데 기존의 객체에 추가되도록 해 보았다.

 

setKeywordArr

const GalleryKeywords = ({ keywordArr,onDel }) => {
    return (
        <GalleryKeywordContainer className='keywordbox'>
            <ul className='keywordul'>
                {
                    keywordArr.map(item => <li key={item.id} className='keywordli'>{item.text}<button className='del' onClick={()=>onDel(item.id)}>X</button></li>)
                }
            </ul>
        </GalleryKeywordContainer>
    );
};

export default GalleryKeywords;

 

검색 내역을 나열할 때 삭제 버튼도 추가해 X 버튼을 누르면 해당 검색 내역이 지워지게 된다.

'🔥 부트캠프-웹 개발 🔥/React' 카테고리의 다른 글
  • [DAY - 77] useReducer, 사용자정의 hook, 예제 React 변환
  • [DAY - 76] useMemo, useCallback
  • [DAY - 74] bootstrap, material, styled
  • [DAY - 73] 회원 관리 예제, 장바구니 예제, JS 예제 React 변환
Yeonhub
Yeonhub
✨ https://github.com/yeonhub 📧 lsy3237@gmail.com
  • Yeonhub
    비 전공자의 Be developer
    Yeonhub
  • 전체
    오늘
    어제
    • 전체보기 (169)
      • 🔍 Tech 🔍 (19)
        • Front-End (11)
        • Back-End (4)
        • AI (1)
        • Server (1)
        • Etc (2)
      • 💡 원티드 프리온보딩 챌린지 💡 (14)
        • PRE-ONBOARDING_AI (11월) (1)
        • PRE-ONBOARDING_FE (2월) (2)
        • PRE-ONBOARDING_FE (1월) (2)
        • PRE-ONBOARDING_FE (12월) (9)
      • 🔥 부트캠프-웹 개발 🔥 (118)
        • HTML5 (7)
        • CSS3 (21)
        • JavaScript (27)
        • JavaScript_advanced (9)
        • React (24)
        • Next (1)
        • MYSql (5)
        • Node (5)
        • 오늘하날(개인프로젝트) (12)
        • 이젠제주투어(팀프로젝트) (7)
      • 💻 CS 💻 (1)
        • 알고리즘 (1)
      • ⚡ 코딩테스트 ⚡ (11)
        • JavaScript (11)
      • 📚 Books 📚 (6)
        • 클린 아키텍처 (2)
        • 인사이드 자바스크립트 (4)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

    • Github
  • 공지사항

  • 인기 글

  • 태그

    python node
    expo fcm
    node cron
    expo fcm push
    rn admob
    php node
    react native expo fcm
    라스콘
    라스콘4
    react vite
    node fcm
    expo node fcm
    expo map
    react native bottom sheet
    javascript fcm
    react native firebase analytics
    react native admob
    컴파운드 컴포넌트 패턴
    Node
    node crontab
    react native analytics
    expo 지도
    expo 길찾기
    expo admob
    bottom sheet
    프론트엔드 테스트코드
    expo deep linking
    node.js fcm
    rn bottom sheet
    expo google map
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
Yeonhub
[DAY - 75] pixabay-api
상단으로

티스토리툴바