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

home2 게시판 React 게시판 리액트 동기 처리방법 관련 질문입니다.

리액트 동기 처리방법 관련 질문입니다.

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

    이영호
    참가자

    안녕하세요 현재 사이트 이벤트 처리를 하고 있습니다.

    사용자가 어떠 어떠한 제품을  클릭하면 getvalue 함수가 실행되게 됩니다.

    이후, 사용자의 금액이 변경 된 후에 -> 거기에 대한 총 합을 계산을 해야 되는 상황이라 예를 들자면

    사용자의 금액(장바구니 속의 아이템 같은) 300, 400, 500 원(현재

    사용자가 클릭해 값 변경시 -> 새로운 값으로 갱신(첫번째 300을 사용자가 600으로 변경한 경우)

    변경한 상태를 state에 저장하고 -> 그 후에 총 합을 계산

     

    즉 사용자의 장바구니 스테이트 값을 갱신 이완료 된 후에-> 총 합을 계산해 갱신 해야 되는 상황입니다.

    이 경우에 사용자의 장바구니 state한개랑 총 합을 저장하는 state총 두개를 사용하였는데

     

    리액트가 비동기 방식이라, 장바구니 값을 갱신하기 전에, 총합을 게산하는 상황이 자꾸 나오게 됩니다.

    async wait을 사용하면 될것 같은데 state변경 함수에는 또 콜백함수 사용이 안된다고 해서,  뭔가 알긴 하겠는데, 코드로 구현이 너무 어려워서 질문 드리게 되었습니다. 비동기 언어는 잘 사용하지 않다보니 너무 어렵네요..

    코드는 이렇습니다.

    const getvalue = (event, value,reason, count)=>{
       
            let test = 0

            let temp = [...user_info[0]] // user info 0 는 제품의 이름을 담은 리스트 1은 제품의 가격을 담은 리스트
            temp[count] = value.name
           
            let temp2 = [...user_info[1]]
            temp2[count] = value.listPrice // 여기까지 장바구니 에 들어있는 사용자의 제품이름,  가격 변경

            change_user_info([temp,temp2]) // 변경한 장바구니 값 state변경

           
            user_price.map(()=>{ // 사용자의 총합 계산

                test = test+ value.listPrice

            })

            change_total_price(test) // 사용자의 총합 변경

           
           

           

         

         
          }

    #32960

    codingapple
    키 마스터

    하나는 state 말고 일반 변수를 쓰거나

    useEffect(()=>{ 총합state변경() }, [장바구니state]) 이거 쓰거나

    리액트 18버전 써봐도 됩니다 auto batching 이라는 기능이 있습니다 

    #32963

    이영호
    참가자

    useeffect 를 이런 상황에도 사용할 수 있네요 응용을 못하고, useeffect는 맨 처음에 쓴다는 생각만 했어서 유연하게 생각을 못 했던것 같습니다. 알려주신useeffect 로 사용해서 해결 했습니다. 감사합니다!!  18버전 기능도 찾아보겠습니다!!

3 글 보임 - 1 에서 3 까지 (총 3 중에서)
  • 답변은 로그인 후 가능합니다.

About

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

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

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