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

home2 게시판 React 게시판 ajax 통신 응용 숙제 관련

ajax 통신 응용 숙제 관련

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

    김소진
    참가자

    안녕하세요

    function App() {

      let [click, setClick] = useState(2);

      function addData() {
        setClick(click+1);

        if (click > 3) {
          window.alert('상품이 더 이상 존재하지 않습니다.');
          return;
        }

        let url = 'https://codingapple1.github.io/shop/data'+click+'.json';

    axios.get(url)
        .then((result)=>{
          console.log(click);
        })
        .catch(()=>{
          console.log('실패')
          console.log(click);
        })

    return (       

    <div>
    <button onClick={()=>addData()}>더보기</button>
     </div>

    }

     

    관련 코드 짠게 이건데요

    처음 클릭하면 num이 3으로 세팅되지 않고 2로 찍히고 두번째 누르면 그제야 +1 돼서 3이 됩니다.

    타이밍 문제인가 싶어서 then 뒤에도 콘솔 찍어봤는데 처음엔 2고 두번째에 3입니다.

    뭐를 잘못한걸까요?

    #36761

    codingapple
    키 마스터

    state 변경함수는 늦게 처리됩니다 

    자바스크립트는 늦게 처리되는 코드는 제껴두고 다음 줄 부터 실행하려고 합니다 

    state 말고 일반변수 쓰거나 하면 될듯요 

    #37733

    김소진
    참가자

    말씀대로 스크립트 언어 구조상 실행순서가 밀린거라면 한번 누르면 어쨌든 +1이 되어야 하지 않나요?

    그런데 처음 클릭시 변수가 안변하고 두번째 클릭시 부터 변수가 +1이 돼요.

    이 부분이 이해가 안가요. 어쨌든 코드는 실행되어야 하는거 아닌가요?

    제가 클릭 후 1초뒤에 click 변수 찍어보도록 해도 결국 첫번째 클릭때는 숫자가 안 올라가거든요. 어떻게 이럴 수 있죠? ㅠㅠ? 왜 실행이 안되는지 저는 이해가 안 갑니다....

    #37768

    codingapple
    키 마스터
    리액트는 이상해서 
    setTimeout 만나면 안의 코드를 1초후에 실행해주는데  
    setTimeout 처음 발견했을 때의 state값을 가져와서 실행해줍니다
4 글 보임 - 1 에서 4 까지 (총 4 중에서)
  • 답변은 로그인 후 가능합니다.

About

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

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

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