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

home2 게시판 React 게시판 part.2 Ajax 요청방법 & 숙제 풀이에서 잘문이 있습니다!!

part.2 Ajax 요청방법 & 숙제 풀이에서 잘문이 있습니다!!

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

    호우야
    참가자

    안녕하세요 애플님.  저는 이전에 상품에 대한 컴포넌트를 만들때,  map 반복문을 통한 상품리스트 출력 또한 컴포넌트에 다 넣어서 1번 ,2번 과 같은 코드를 작성하였습니다. 지금까지는 아래와 같이 컴포넌트화 시켜서 App()컴포넌트에 넣어서 잘 돌아갔습니다.

     

    그리고 이제 Ajax를 통해 데이터를 더 가져와서 state배열에 추가해주는 과정에서 궁금증이 생겼습니다.

    코딩애플님의 경우 App()안에 작성하 였으니  다음과 같은 코드를 작성하셨습니다.

    shoes변경([...shoes, ...result.data ]);

    하지만  저는 axios 코드 또한 Shoes 컴포넌트 안에서 실행하였고 부모 컴포넌트인 App()에서 받아오기 위해  다음과 같이 props를 붙여주었습니다. 작성 후에 에러가 뜨지는 않지만, 더보기 클릭시 데이터가 출력되지는 않습니다.

    props.shoes변경([...props.shoes, ...result.data ]);

     

    제 생각엔 지금까지는 부모(App)컴포넌트에서  props로 잘 받아 와서 Shoes컴포넌트에서 state를 사용하였고,  위의 경우도 props로 배열을 가져온 것까지는 된거 같습니다. 그리고 배열에 추가된 데이터가 들어갔는데,  추가된 바뀐 shoes state를 다시 App()에서 출력하게 되어있으므로 출력이 안되는걸까요?

    즉, 데이터가 위에서 아래로 흘러야 하는데,  아래에서 추가한게 생기고 위로 다시 역류한 느낌? 그래서 출력은 안되는 느낌? 인거 같은데... 맞을까요?

    그리고 이럴 경우는 해결방법이 있는지, 그리고 저처럼 모든 기능을 컴포넌트화 시키는 것은 안좋은 방법인지 궁금합니다. 

     

    1. ----------------------------------------------------------------------------------------

    function Shoes(props){
    return(
    <div className='container'>
    <div className='row'>
    {
    props.shoes.map((a,i)=>{
    return(
    <div className='col-md-4' key={i}>

    <h4>{props.shoes[i].title}</h4>
    <p>{props.shoes[i].content}</p>
    <p>{props.shoes[i].price}</p>
    </div>
    )
    })
    }
     
    </div>
    <button className='btn btn-primary' onClick ={()=> {

    axios.get('https://codingapple1.github.io/shop/data2.json')
    .then((result)=>{
     
    props.shoes변경([...props.shoes, ...result.data ]);
    })
    .catch(()=>{ })
    }}>더보기</button>
    </div>

    2. ----------------------------------------------------------------------------------------

    function App() {

    let [shoes,shoes변경] = useState(Data);

    return (
    <div className="App">
     
     
    <BrowserRouter>

    <Navigation></Navigation>
    {/* 메인페이지 */}
    <Switch>
    <Route exact path="/">
    <Post></Post>
    <Shoes shoes={shoes}></Shoes>
    </Route>

    {/* 상세페이지 */}
    <Route path="/detail/:id">
    <Detail shoes={shoes}></Detail>
    </Route>

     
    </Switch>
    </BrowserRouter>
    </div>
    );
    }

    #29922

    호우야
    참가자

    코딩애플님 해결했습니다.!! 데이터 흐름 문제는 아닌거 같아요. map반복문 또한 컴포넌트화시켜놓은거 안에 존재하고 거기서 3개 + 3개 다 출력가능하니까요.  props를 시킬때 shoes에 대해서만 받아오고, shoes변경에 대해서 받아오는 과정은 빼먹었네요!!

    #29926

    codingapple
    키 마스터

    컴포넌트는 함수랑 용도가 똑같습니다 

    나중에 재사용할거같은 html 덩어리들이나 자주 바뀔거같은 html 덩어리들을 함수로 묶는게 좋습니다 

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 호 / 개인정보관리자 : 박종흠