Zoeeey
Stack flows in you
Zoeeey
  • 분류 전체보기 (155)
    • 💡 UXUI (4)
      • UXUI (2)
      • UI (2)
      • UX (0)
    • 🟨 JavaScript (66)
      • 개념 (42)
      • 정리 (2)
      • 문제풀기 (프로그래머스, 코딩애플) (15)
      • 응용하여 자동화or문제해결하기 (2)
      • 기타 (5)
    • ⚛️ React (49)
      • 개념 (27)
      • 개념(Redux) (3)
      • 정리 (4)
      • 문제풀기 (코딩애플: React) (15)
    • 📘 TypeScript (10)
      • 개념 (8)
      • 문제풀기 (코딩애플) (2)
    • 🌐 HTML,CSS (18)
      • 실무에서 자주 발생한 오류들 (10)
      • 뒤늦게 알아서 뼈아픈 유용한 CSS (6)
      • 기타 자주 쓰는 CSS (2)
    • 💻 CS (8)
      • CS (5)
      • 정규표현식 (2)
      • Git,Github (1)

태그

  • redux
  • 프로그래머스
  • JavaScript
  • react
  • 코딩애플
  • class
  • 오류
  • object
  • json
  • UXUI
  • Props
  • axios
  • CSS
  • 삼항연산자
  • useEffect
  • TypeScript
  • array
  • state
  • Ajax
  • CS
전체 방문자
오늘
어제
hELLO · Designed By 정상우.
Zoeeey

Stack flows in you

⚛️ React/문제풀기 (코딩애플: React)

React : 최근 본 상품 만들기 (localStorage, map, JSON)

2023. 7. 3. 21:17

조건

useNavigate훅을 사용한 상세보기 페이지("/detail/:id"형태)에 접근하면 해당 상품의 id 번호를 최근 본 상품에 업데이트한다.
여기서 최근 본 상품은 항상 옆에 떠 있는 플로팅 박스이다.


풀이

App.js

function App() {
  let getWatched = localStorage.getItem('watched');
  ...
  useEffect(() => {
    // 로컬스토리지 'watched'가 존재하지 않을 때만 빈 배열을 생성
    if (!getWatched)) {
      localStorage.setItem('watched', JSON.stringify([]));
    }
  }, []);
  ...
  return (
    ...
    // getWatched가 존재하면 Watched 컴포넌트를 랜더링
    // watchedItemsprop으로 getWatched값을 전달
    // getWatched값은 JSON 문자열이므로 JSON.parse()를 사용하여 JavaScript 객체나 배열로 변환
    {getWatched && <Watched watchedItems={JSON.parse(getWatched)}/>}
    ...
  );
}
function Watched(props){
  return (
    <>
      <div className="watchedlist">
        <h6>최근본상품</h6>
        {
          <!-- 삼항연산자로 값이 있을 시와 없을 시 구분 -->
          props.watchedItems === []
          ? props.watchedItems.map((value, index) =>
            <!-- key={} 빼면 오류남 -->
            <!-- key값은 반복되는 엘리먼트를 랜더링할 때 고유로 식별하기 위해 사용 -->
            <!-- index는 변할 수 있으므로, 변하지 않을 때만 권장됨 -->
            <div className="box" key={value.id}> 
              <p>{value}번째 상품</p>
            </div>
          )
          : <div className="box"><p>상품이 없습니다.</p></div>
        }
      </div>
    </>
  )
}

Detail.js

function Detail(props){
  ...
  useEffect(()=>{
    // 코드가 의도치 않게 두번 실행되는 걸 막아주는 코드
    // 이미 if문으로 이미 있는 id는 추가를 막고 있으므로 의미가 없다
    // setTimeout(()=> {setPagefade('end')}, 1000)

    let getWatched = localStorage.getItem('watched');
    getWatched = JSON.parse(getWatched);
    if (!getWatched.includes(selectedShoes.id)) {
      getWatched.push(selectedShoes.id);
      localStorage.setItem('watched', JSON.stringify(getWatched));
    }

    // 코드가 의도치 않게 두번 실행되는 걸 막아주는 코드2
    // return ()=>{
    //   setPagefade('')
    // }
  }, []);
  ...

 

저작자표시 비영리 동일조건 (새창열림)

'⚛️ React > 문제풀기 (코딩애플: React)' 카테고리의 다른 글

React : 상품을 장바구니에 추가하기 (immer, redux, action, payload)  (0) 2023.06.30
React : 장바구니 제품 수량변경 (map, redux, action, payload)  (0) 2023.06.22
React : 탭 내용 fade되도록 만들기 (+class에 변수 넣기)  (0) 2023.06.15
React : 탭 만들기 (if else, array로 만들기) + props 귀찮을 때 팁  (0) 2023.06.12
React : 더보기 버튼을 누를 때마다 다른 get주소 데이터 불러오기 (+로딩중)  (0) 2023.06.01
    '⚛️ React/문제풀기 (코딩애플: React)' 카테고리의 다른 글
    • React : 상품을 장바구니에 추가하기 (immer, redux, action, payload)
    • React : 장바구니 제품 수량변경 (map, redux, action, payload)
    • React : 탭 내용 fade되도록 만들기 (+class에 변수 넣기)
    • React : 탭 만들기 (if else, array로 만들기) + props 귀찮을 때 팁
    Zoeeey
    Zoeeey
    길게 생각하고 짧게 그리기

    티스토리툴바