• 로그인
  • 장바구니에 상품이 없습니다.

home2 게시판 React 게시판 Redux 5 : 장바구니 기능 만들기 숙제 & 응용문제

Redux 5 : 장바구니 기능 만들기 숙제 & 응용문제

2 글 보임 - 1 에서 2 까지 (총 2 중에서)
  • 글쓴이
  • #91071

    이종열
    참가자
    우선 방대한 코드를 올려 죄송합니다 ;;;
     
    주문하기 버튼을 눌렀는데 cart에 왜 추가가 안되는지 모르겟습니다 ㅠㅠ
    

    <hr />

     
    1. Detail.js 파일
    import { useContext, useEffect, useState } from 'react';
    import { useParams } from 'react-router-dom';
    import styled from 'styled-components';
    import { Nav } from 'react-bootstrap';
    import { useDispatch } from 'react-redux';
    import { addItem } from './../store.js';
    let Betty = styled.div`
      background:${props => props.bg};
      color:white;
      padding:20px
    `
    let Betty2 = styled(Betty)`
    padding : 50px;
    `
    let Box = styled.div`
    background:${p => p.bg};
    color: white;
    border-radius:50%;
    `
    function Detail({ shoes }) {
      let { id } = useParams();
      let 찾은상품 = shoes.find(x => { return x.id == id; });
      let [alert, setAlert] = useState(true);
      let [inputData, setInputData] = useState('');
      let [isNum, setIsNum] = useState(false);
      let 

    = useState(2);   let dispatch = useDispatch();
      let [fade2, setFade2] = useState('');
      useEffect(() => {
        setTimeout(() => {
          setAlert(false)
        }, 2000);
        if (!!isNaN(inputData)) {
          setIsNum(true)
        } else {
          setIsNum(false)
        }
        // 트랜지션 효과주기 
        let a = setTimeout(() => {
          setFade2('end')
        }, 100);
        return () => {
          clearTimeout(a)
          setFade2('')
        }
      }, [])
      return (
        <div className={'container start ' + fade2}>
          {alert === true ? <div className="alert alert-warning">
            2秒 以内購買の場合割引!!!!
          </div> : null}
          {/* 🟢🟢🟢🟢🟢🟢🟢🟢🟢 */}
          数量:<input onChange={(e) => {
            setInputData(e.target.value);
            console.log(inputData)
          }}></input>
          {
            isNum === true ? <div
              style={{ backgroundColor: "red", color: "white" }}
            >警告:数字のみご記入しなさい。</div> : null
          }
          {/* <Betty bg="red">이것이 바로 styled-components</Betty>
          <Betty bg="blue">이것이 바로 styled-components</Betty>
          <Betty2 bg="green">cascascpkaopsasockapskcopa</Betty2> */}
          <div className="row">
            <div className="col-md-6">
              < img src={찾은상품.img} width="100%" alt='noPicture' />
            </div>
            <div className="col-md-6">
              <h4 className="pt-5">{찾은상품.title}</h4>
              <p>{찾은상품.content}</p>
              <p>{찾은상품.price}</p>
              <button
                className="btn btn-danger"
                onClick={() => {
                  dispatch(addItem({ id: 1, name: 'isei miyake', count: 2 }));
                }}
              >
                주문하기
              </button>
            </div>
          </div>
          <Box bg='black'>お洒落な貴方に</Box>
          {/* 네브바  */}
          <Nav variant="tabs" defaultActiveKey="0">
            <Nav.Item>
              <Nav.Link eventKey="0" onClick={(e) => { setTab(0) }}>버튼0</Nav.Link>
            </Nav.Item>
            <Nav.Item>
              <Nav.Link eventKey="1" onClick={(e) => { setTab(1) }}>버튼1</Nav.Link>
            </Nav.Item>
            <Nav.Item>
              <Nav.Link eventKey="2" onClick={(e) => { setTab(2) }}>버튼2</Nav.Link>
            </Nav.Item>
          </Nav>
          <TabContent tab={tab} shoes={shoes} />
        </div>
      )
    }
    function TabContent({ tab, shoes }) {
      let [fade, setFade] = useState('')
      useEffect(() => {
        let a = setTimeout(() => {
          console.log(shoes)
          setFade('end') // automatic batch 때문에 state변경 함수를 연달아 쓰면 마지막 값으로 처리함
        }, 100)
        return () => {
          clearTimeout(a)
          setFade('')
        }
      }, 

    )   return <div className={'start ' + fade}>     {[<div>内容⓪</div>, <div>内容❶</div>, <div>内容❷</div>]

    }   </div>}
    export default Detail;
    

    <hr />

    2. store.js 파일

    // 리덕스를 사용하면 state를 보관하는 통(store)을 만들어 주는 것이다.
    import { configureStore, createSlice } from '@reduxjs/toolkit';
    import user from './store/userSlice.js'
     
    let cart = createSlice({ //useState 역할과 비슷
      name: 'cart',
      initialState: [
        { id: 0, name: 'White and Black', count: 2 },
        { id: 2, name: 'Grey Yordan', count: 1 }
      ],
      reducers: {
        addCount(state, action) {
          const 번호 = state.findIndex(a => a.id === action.payload)
          state[번호].count++
        },
        addItem(state, action) {
          state.push(action.payload)
        }
      }
    })
    export let { addCount, addItem } = cart.actions
    export default configureStore({
      reducer: {
        user: user.reducer,
        cart: cart.reducer
      }
    })

     

    #91088

    codingapple
    키 마스터
    addItem 함수는 잘 실행되는지 함수안에서 console.log 부터 써봅시다
2 글 보임 - 1 에서 2 까지 (총 2 중에서)
  • 답변은 로그인 후 가능합니다.

About

현재 월 700명 신규수강중입니다.

  (09:00~20:00) 빠른 상담은 카톡 플러스친구 코딩애플 (링크)
  admin@codingapple.com
  이용약관, 개인정보처리방침
ⓒ Codingapple, 강의 예제, 영상 복제 금지
top

© Codingapple, All rights reserved. 슈퍼로켓 에듀케이션 / 서울특별시 강동구 고덕로 19길 30 / 사업자등록번호 : 212-26-14752 온라인 교육학원업 / 통신판매업신고번호 : 제 2017-서울강동-0002 호 / 개인정보관리자 : 박종흠