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

home2 게시판 React 게시판 도와주세욧..!!!

도와주세욧..!!!

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

    조윤빈
    참가자
    Main.js
    
    
    import React, { useState, useRef ,useEffect} from 'react';
    import {Routes,Route,Link} from 'react-router-dom';
    import {useSelector,useDispatch} from "react-redux";
    import {plusPrice,minusPrice,plusAmount,minusAmount,resetAmount,resetPrice,addMenus,removeMenus,resetMenus} from "./store.js";
    import Menu from './Menu';
    import menuModal from './MenuModal.js';
    import MenuList from './MenuList';
    import './App2.css';
    function Main(){
        let store = useSelector((state) => state);
        let dispatch = useDispatch();
    //    const [checkedMenus,setCheckedMenus] = useState([
        
    //    ]); // 선택된 메뉴들이 저장되는 배열
       const nextId = useRef(1); // 선택된 메뉴들의 id는 1부터 시작
       const onCreate = (menuImage, menuName, menuPrice,menuTemp,menuCon,syrupAmount) => {
        const checkedmenu = {
            id:nextId.current,
            menuImage,
            menuName,
            menuPrice,
            menuTemp,
            menuCon,
            syrupAmount
       }
    //    setCheckedMenus([...checkedMenus,checkedmenu])
       dispatch(addMenus(checkedmenu));
       nextId.current += 1;
       dispatch(plusAmount());
       dispatch(plusPrice(parseInt(menuPrice)));
       //console.log(store.checkedMenus.menuAmount)
       console.log('Temperature:', menuTemp);
       console.log('Concentration:', menuCon);
       console.log('Syrup Amount:', syrupAmount);
       }
       const onRemove = (id,menuPrice,menuAmount) =>{
        console.log(menuAmount);
        nextId.current -= 1;
        // dispatch(store.checkedMenus.filter(checkedmenu => checkedmenu.id !== id));
        dispatch(removeMenus(id));
        dispatch(minusAmount());
        // store.orderPrice -= parseInt(menuPrice)*menuAmount;
        dispatch(minusPrice(parseInt(menuPrice)*menuAmount));
       }
       
       const Plus = (menuPrice) =>{
            dispatch(plusPrice(parseInt(menuPrice)));
       }
       const Minus = (menuPrice) =>{
            // setOrderPrice(orderPrice -parseInt(menuPrice));
            dispatch(minusPrice(parseInt(menuPrice)));
       }
       useEffect(() => {
        // orderPrice 상태가 변경된 후 실행되는 로직을 이곳에 작성
        console.log('orderPrice가 업데이트되었습니다:', store.orderPrice);
      }, [store.orderPrice]); // store.orderPrice가 변경될 때만 실행
        return(
            <>
            <nav className="nav_top">
    {/* <div className="nav_logo">
        < img src="logo.png" alt="스마트정보통신공학과 로고"></img>
        스마트정보통신공학과
    </div> */}
    <p>주문 번호: 1번</p>
    <button className="main_btn">로그아웃</button>
    </nav>
    <Menu
    onCreate={onCreate}
    onRemove={onRemove}
    />
    <div style={{height:"74px"}}></div>
    {/* <div className="checked_menu_line"> 
    <p>선택한 메뉴</p>
    </div>
    <MenuList checkedMenus={store.checkedMenus} onRemove={onRemove} Plus={Plus} Minus={Minus}/>
    <div className="order_line">
    <p id="order_amount">
        <span>주문 수량</span>
        <span>{store.orderAmount}</span>
    </p>
    <p id="order_price">
        <span>주문 금액</span>
        <span>{store.orderPrice} 원</span>
    </p>
    </div> */}
    <div className="bottom_line">
    {/* <button id="all_cancel_btn" onClick={()=>{
        dispatch(resetMenus());
        // setOrderAmount(0);
        // setOrderPrice(0);
        dispatch(resetAmount());
        dispatch(resetPrice());
    }}>전체 취소</button> */}
    <div className="orderPrice">
        <div className="orderPrice_1">총 상품금액</div>
        <div className='orderPrice_2'>{store.orderPrice} 원</div>
    </div>
    <div className='orderPrice'>
    <Link to="/kiosk2"><button className="main_btn">장바구니({store.orderAmount})</button></Link>
    </div>
    </div>
    </>
        )
    }
    export default Main;
    
    Menu.js
    
    import React,{ useState, useRef } from 'react';
    import MenuModal from './MenuModal';
    function MenuItem({menuName,menuImage,menuPrice,onCreate}){
      const [Modal,setModal] = useState(false);
        return(
          <>
          <MenuModal show={Modal} onHide={()=>{setModal(false)}} onCreate={()=>{onCreate(menuName,menuImage,menuPrice)}}></MenuModal>
            <li onClick={()=>{
              setModal(true)}}>
                < img src={menuImage} alt={menuName}></img>
                <p>{menuName}</p>
                <p>{menuPrice}</p>
            
            </>
        );
    }
    function Menu({onCreate,onRemove}){
        let [menuName,setMenuName] = useState(['에스프레소','아메리카노','카푸치노','카페라떼','바닐라라떼','헤이즐넛라떼','더치커피','카페모카','돌체라떼']);
        let [menuImage,setMenuImage] = useState(['계란.jpeg','계란말이.jpeg','계란찜.jpeg','계란볶음밥.jpeg','계란후라이.jpeg','삶은계란.jpeg','계란.jpeg','계란.jpeg','계란.jpeg']);
        let [menuPrice,setMenuPrice] = useState([1500,1500,2900,2900,3300,3300,3300,3500,3800])
       
       const [menubar,setMenubar] = useState(0);
       const menuStyle = (Index)=>{
        setMenubar(Index);
        if(Index === 1){
            setMenuName(['레몬에이드','자몽에이드','청포도에이드','그린티라떼','곡물라떼','밀크티','블루베리라떼','망고라떼','딸기라떼']);
            setMenuImage(['사이다.jpeg','콜라.jpeg','환타.jpeg','맥주.jpeg','소주.jpeg','막걸리.jpeg','맥주.jpeg','소주.jpeg','막걸리.jpeg']);
            setMenuPrice([3500,3500,3500,3500,3300,3800,3800,3800,3800]);
        }
        else if(Index === 2){
            setMenuName(['딸기스무디','망고스무디','블루베리스무디','망고요거트스무디','딸기요거트스무디','유자스무디','민트초코프라페','자바칩프라페','그린티프라페']);
            setMenuImage(['감자튀김.jpeg','젤리.jpeg','과자.jpeg','아이스크림.jpeg','껌.jpeg','초콜릿.jpeg','아이스크림.jpeg','껌.jpeg','초콜릿.jpeg']);
            setMenuPrice([3800,3800,3800,4000,4000,3800,4000,4000,4000]);
        }
       else{
            setMenuName(['에스프레소','아메리카노','카푸치노','카페라떼','바닐라라떼','헤이즐넛라떼','더치커피','카페모카','돌체라떼']);
            setMenuImage(['계란.jpeg','계란말이.jpeg','계란찜.jpeg','계란볶음밥.jpeg','계란후라이.jpeg','삶은계란.jpeg','계란.jpeg','계란.jpeg','계란.jpeg']);
            setMenuPrice([1500,1500,2900,2900,3300,3300,3300,3500,3800]);
       }
       }
       
      
       const menuItems = [
        {menuName:menuName[0], menuImage:menuImage[0], menuPrice:menuPrice[0] + "원"},
        {menuName:menuName[1], menuImage:menuImage[1], menuPrice:menuPrice[1] + "원"},
        {menuName:menuName[2], menuImage:menuImage[2], menuPrice:menuPrice[2] + "원"},
        {menuName:menuName[3], menuImage:menuImage[3], menuPrice:menuPrice[3] + "원"},
        {menuName:menuName[4], menuImage:menuImage[4], menuPrice:menuPrice[4] + "원"},
        {menuName:menuName[5], menuImage:menuImage[5], menuPrice:menuPrice[5] + "원"},
        {menuName:menuName[6], menuImage:menuImage[6], menuPrice:menuPrice[6] + "원"},
        {menuName:menuName[7], menuImage:menuImage[7], menuPrice:menuPrice[7] + "원"},
        {menuName:menuName[8], menuImage:menuImage[8], menuPrice:menuPrice[8] + "원"}
       ]
      //  const [Modal,setModal] = useState(false);
        return(
        <div>
          {/* <menuModal show={Modal} onHide={()=>{setModal(false)}}></menuModal> */}
        <ul className="menu_bar">
          <li id="mainmenu" className={menubar === 0 ? 'active' : ''}
            onClick={()=>menuStyle(0)}>커피
          <li id="drink" className={menubar === 1 ? 'active' : ''}
            onClick={()=>menuStyle(1)}>논커피
          <li id="sidemenu" className={menubar === 2 ? 'active' : ''}
            onClick={()=>menuStyle(2)}>스무디/프라페
        
      
      <ul className="menu_1">
          {menuItems.slice(0,3).map(item =>(
                <MenuItem key={item.menuName}
                menuName={item.menuName}
                            menuImage={item.menuImage}
                            menuPrice={item.menuPrice}
                            onCreate={() => onCreate(item.menuImage, item.menuName, item.menuPrice)}
                            />
          ))}
      
      <ul className="menu_2">
            {menuItems.slice(3,6).map(item =>(
                <MenuItem key={item.menuName}
                menuName={item.menuName}
                            menuImage={item.menuImage}
                            menuPrice={item.menuPrice}
                            onCreate={() => onCreate(item.menuImage, item.menuName, item.menuPrice)}
                            />
            ))}
      
      <ul className="menu_3">
            {menuItems.slice(6).map(item =>(
                <MenuItem key={item.menuName}
                menuName={item.menuName}
                            menuImage={item.menuImage}
                            menuPrice={item.menuPrice}
                            onCreate={() => onCreate(item.menuImage, item.menuName, item.menuPrice)}
                            />
            ))}
      
      </div>
        )
    }
    export default Menu;
    
    MenuModal.js
    
    import React, {useState} from 'react';
    import {Modal,Button} from 'react-bootstrap';
    import 'bootstrap/dist/css/bootstrap.min.css';
    import './App.css';
    const MenuModal = ({show,onHide,onCreate}) =>{
      const [menuTemp,setMenuTemp] = useState('hot');
      const [menuCon,setMenuCon] = useState('soft');
      const [syrupAmount,setSyrupAmount] = useState(1);
        return(
            <Modal
          show={show}
          onHide={onHide}
          size="lg"
          aria-labelledby="contained-modal-title-vcenter"
          centered
        >
          <Modal.Header closeButton>
            <Modal.Title id="contained-modal-title-vcenter">
              옵션
            </Modal.Title>
          </Modal.Header>
          <Modal.Body>
            <div className='modal_1'>
              <div className='temp'>
                <button className={menuTemp === 'hot' ? 'active_hot' : 'hot'}  onClick={()=>{setMenuTemp('hot')}}>HOT</button>
                <button className={menuTemp === 'iced' ? 'active_iced' : 'iced'}  onClick={()=>{setMenuTemp('iced')}}>ICED</button>
              </div>
              <div className='amt'>
                  <button>-</button>
                  <span>1</span>
                  <button>+</button>
              </div>
            </div>
            <div className='option'>
              <p>농도</p>
              
                  <li className={menuCon=='soft'?'active_option':''} onClick={()=>{setMenuCon('soft')}}>연하게             <li className={menuCon=='hard'?'active_option':''} onClick={()=>{setMenuCon('hard')}}>진하게          
            </div>         <div className='option'>           <p>시럽</p>          
                  <li className={syrupAmount==1?'active_option':''} onClick={()=>{setSyrupAmount(1)}}>1펌프             <li className={syrupAmount==2?'active_option':''} onClick={()=>{setSyrupAmount(2)}}>2펌프             <li className={syrupAmount==3?'active_option':''} onClick={()=>{setSyrupAmount(3)}}>3펌프          
            </div>       </Modal.Body>       <Modal.Footer>         <Button onClick={()=>{onHide(); onCreate(menuTemp,menuCon,syrupAmount)}}>장바구니 담기</Button>       </Modal.Footer>     </Modal>     ) } export default MenuModal; menuModal.js 에 있는 menuTemp, menuCon, syrupAmount 의 값들을 onCreate 함수에 전달하고 싶은데 잘 안됩니당... 어떤 부분이 잘못된건가요...?
    
    
    #103760

    codingapple
    키 마스터
    전달은 잘될거같은데요 onCreate함수 안에서 파라미터들 출력해봅시다
    #104438

    조윤빈
    참가자
    콘솔로그로 확인해봤는데 undefined 라고 뜹니다 ㅠㅠ
    
    
    #104439

    조윤빈
    참가자
    MenuModal.js
    
    import React, {useState} from 'react';
    import {Modal,Button} from 'react-bootstrap';
    import 'bootstrap/dist/css/bootstrap.min.css';
    import './App.css';
    const MenuModal = ({show,onHide,onCreate,Plus,menuName,menuImage,menuPrice}) =>{
      const IntPrice = parseInt(menuPrice,10);
      const [menuTemp,setMenuTemp] = useState('hot');
      const [menuCon,setMenuCon] = useState('soft');
      const [syrupAmount,setSyrupAmount] = useState(1);
      const [menuAmount,setMenuAmount] = useState(1);
      const [modalMenuPrice,setModalMenuPrice] = useState(IntPrice);
     
      const AmountPlus = ()=> {
        setMenuAmount(menuAmount+1);
        setModalMenuPrice(IntPrice*(menuAmount+1));
      }
        return(
            <Modal
          show={show}
          onHide={onHide}
          size="lg"
          aria-labelledby="contained-modal-title-vcenter"
          centered
        >
          <Modal.Header closeButton>
            <Modal.Title id="contained-modal-title-vcenter">
              옵션
            </Modal.Title>
          </Modal.Header>
          <Modal.Body>
            <div className='option_menuInfo'>
              < img src={menuImage} style={{width:'150px'}}></img>
                <div className='option_menuInfo_1'>
                  <div>{menuName}</div>
                  <div style={{color:'red'}}>{modalMenuPrice}원</div>
                </div>
            </div>
            <div className='modal_1'>
              <div className='temp'>
                <button className={menuTemp === 'hot' ? 'active_hot' : 'hot'}  onClick={()=>{setMenuTemp('hot')}}>HOT</button>
                <button className={menuTemp === 'iced' ? 'active_iced' : 'iced'}  onClick={()=>{setMenuTemp('iced')}}>ICED</button>
              </div>
              <div className='amt'>
                  <button onClick = {()=>{
                    if(menuAmount <= 1)
                        setMenuAmount(1);
                    else{
                        setMenuAmount(menuAmount - 1);
                    }
                    }}>-</button>
                  <span>{menuAmount}</span>
                  <button onClick = {()=>{AmountPlus()}}>+</button>
              </div>
            </div>
            <div className='option'>
              <p>농도</p>
              
                  <li className={menuCon=='soft'?'active_option':''} onClick={()=>{setMenuCon('soft')}}>연하게             <li className={menuCon=='hard'?'active_option':''} onClick={()=>{setMenuCon('hard')}}>진하게          
            </div>         <div className='option'>           <p>시럽</p>          
                  <li className={syrupAmount==1?'active_option':''} onClick={()=>{setSyrupAmount(1)}}>1펌프             <li className={syrupAmount==2?'active_option':''} onClick={()=>{setSyrupAmount(2)}}>2펌프             <li className={syrupAmount==3?'active_option':''} onClick={()=>{setSyrupAmount(3)}}>3펌프          
            </div>       </Modal.Body>       <Modal.Footer>         <Button onClick={()=>{onHide(); onCreate(menuImage,menuName,modalMenuPrice,menuTemp,menuCon,syrupAmount,menuAmount)}}>장바구니 담기</Button>       </Modal.Footer>     </Modal>     ) } export default MenuModal; Main.js const onCreate = (menuImage, menuName, modalMenuPrice,menuTemp,menuCon,syrupAmount,menuAmount) => {     const checkedmenu = {         id:nextId.current,         menuImage,         menuName,         modalMenuPrice,         menuTemp,         menuCon,         syrupAmount,         menuAmount    } //    setCheckedMenus([...checkedMenus,checkedmenu])    dispatch(addMenus(checkedmenu));    nextId.current += 1;    dispatch(plusAmount());    dispatch(plusPrice(parseInt(modalMenuPrice)));    //console.log(store.checkedMenus.menuAmount)    console.log('modalMenuPrice',modalMenuPrice);    console.log('Temperature:', menuTemp);    console.log('Concentration:', menuCon);    console.log('Syrup Amount:', syrupAmount);    console.log('menuAmount:', menuAmount);    } onCreate함수에 인자 전달이 잘 되지 않는 것 같습니다 ㅠㅠ 근데 어떤 부분이 잘못된건지 모르겠습니다..
    #104485

    codingapple
    키 마스터
     <MenuModal show={Modal} onHide={()=>{setModal(false)}} onCreate={()=>{onCreate(menuName,menuImage,menuPrice)}}></MenuModal>
    함수를 또 만들어서 props로 보내지말고 onCreate={onCreate}만 해봅시다
5 글 보임 - 1 에서 5 까지 (총 5 중에서)
  • 답변은 로그인 후 가능합니다.

About

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

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

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