🀍 은지log 🀍

[REACT] Naver μ±… 검색 λ³Έλ¬Έ

πŸ’™ React

[REACT] Naver μ±… 검색

Eun_zii 2022. 10. 6. 13:49

 

 

Naver μ˜ν™” 검색

🎣 1. Router.js 생성 import { BrowserRouter, Routes, Route } from 'react-router-dom' import Main from './components/pages/Main' import Movie from './components/pages/Movie' import Book from './comp..

eun-jii.tistory.com

 

 

🎣 1. Router.js 생성

import { BrowserRouter, Routes, Route } from 'react-router-dom'
import Main from './components/pages/Main'
import Movie from './components/pages/Movie'
import Book from './components/pages/Book'

const Router = () => {
  return (
    <BrowserRouter>
      <Routes>
        <Route path="/" element={<Main />} />
        <Route path="/movie" element={<Movie />} />
        <Route path="/book" element={<Book />} />
      </Routes>
    </BrowserRouter>
  )
}

export default Router

🎣 2. Main.jsx

import { Link } from 'react-router-dom'
import styled from 'styled-components'

const Main = () => {
  return (
    <Wrapper>
      <PageTitle>μ˜ν™” 🎬 & μ±… πŸ“š 검색</PageTitle>
      <Link to="/Movie">
        <Button>μ˜ν™” 🎬</Button>
      </Link>
      <Link to="/Book">
        <Button>μ±… πŸ“š</Button>
      </Link>
    </Wrapper>
  )
}

const Wrapper = styled.div`
  padding: 15px;
`
const PageTitle = styled.h2`
  text-align: center;
`
const Button = styled.button`
  width: 100%;
  margin: 10px 0;
  height: 100px;
  font-size: 24px;
  border: none;
  border-radius: 4px;
`

export default Main

🎣 3. Book.jsx

import { useState } from 'react'
import styled from 'styled-components'
import { getBookList } from '../../apis'
import BookList from '../organisms/BookList'

const Book = () => {
  const [text, setText] = useState('')
  const [bookList, setBookList] = useState([])

  const handleSubmit = async (e) => {
    e.preventDefault()

    const { items } = await getBookList({ query: text })
    setBookList(items)
  }

  return (
    <Wrapper>
      <PageTitle>πŸ“š BOOK πŸ“š</PageTitle>
      <Form onSubmit={handleSubmit}>
        <InputText
          placeholder="search"
          value={text}
          onChange={(e) => setText(e.target.value)}
        />
        <BtnSubmit>검색</BtnSubmit>
      </Form>
      <BookList data={bookList} />
    </Wrapper>
  )
}

const Wrapper = styled.div``
const PageTitle = styled.h2``
const Form = styled.form`
  display: flex;
  padding: 15px;
`
const InputText = styled.input`
  flex: 1;
  margin-right: 15px;
`
const BtnSubmit = styled.button``

export default Book

🎣 3-1. BookList.jsx

import styled from 'styled-components'

const BookList = ({ data }) => {
  return (
    <List>
      {data.map(({ image, title }) => (
        <Item key={image}>
          <Thumbnail src={image} />
          <Title dangerouslySetInnerHTML={{ __html: title }} />
        </Item>
      ))}
    </List>
  )
}

const List = styled.div`
  display: grid;
  grid-template-columns: 1fr 1fr;
  grid-gap: 10px;
  padding: 15px;
`
const Item = styled.div``
const Thumbnail = styled.img`
  width: 100%;
`
const Title = styled.span``

export default BookList

🎣 3-2. src>apis>index.js νŒŒμΌμƒμ„±

import axios from 'axios'

export const getBookList = async (params) => {
  const { data } = await axios.get('/v1/search/book.json', {
    headers: {
      'X-Naver-Client-Id': 'ID',
      'X-Naver-Client-Secret': 'PW',
    },
    params,
  })

  return data
}

πŸ“Œ μ„œλ²„λ₯Ό λ§Œλ“€μˆ˜ μ—†μœΌλ‹ˆ package.json μ—μ„œ
"proxy": "https://openapi.naver.com" μΆ”κ°€ν•΄μ£ΌκΈ°

 

proxy λŠ” κ°œλ°œκ³Όμ •μ—μ„œλ§Œ μ‚¬μš©κ°€λŠ₯. 배포 ν• λ•ŒλŠ” μ„œλ²„ ν•„μš”ν•¨.
(즉, μ—°μŠ΅λ•Œλ§Œ μ‚¬μš©ν• μˆ˜ 있음) πŸ“Œ

728x90

'πŸ’™ React' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€

[REACT] Pagination κ³Ό Querystring  (0) 2022.10.06
[REACT] Instagram _ Log-In  (0) 2022.10.06
[REACT] Naver μ˜ν™” 검색  (0) 2022.10.06
[REACT] Modal  (0) 2022.10.06
[REACT] DropDown  (0) 2022.10.06