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

home2 게시판 React 게시판 더보기 버튼을 따로 컴포넌트로 만들면서 궁금한점

더보기 버튼을 따로 컴포넌트로 만들면서 궁금한점

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

    더보기 버튼을  한번 누르면 false가 돼서 버튼을 안보이게 하는중에 궁금한점이 있어서요!! 
    일단 신발데이터를 리덕스에 있습니다! 

    axios로 받아온 데이터를 리덕스  item에 넣으려고 하는데 cart 예제처럼 
    똑같이 했는데 TypeError: props.dispatch is not a function 에러가 나서
    헤매다가  <More/>에 dispatch= {props.dispatch} 를 추가하니까 됐어요
    cart예제랑 비교해 보면 cart도 app의 자식인데 <cart/>안에가 비어있어도 되었는데 
    왜 More은 써줘야하나요? react를 처음 배워서 아직 부모랑 자식개념이 안잡혀있는거같아요
    Cart는 페이지가 따로 있어서 안써줘도 되는건가요? 근데 <Detail>에는

    item={props.item}를 써줬어요(안써도 돌아가긴하는데 일단 써놓긴 했어요) 어떨땐 쓰고 어떨땐 안쓰는게 궁금해요 

    그리고 app이 부모고 detail이 자식 , detail이 부모고 more이 자식 이런식으로 가는거 맞나요?
    그럼 app의 손자는 more이 되는건지요? 

     

    {
              more === true
              ?
              <More item={props.item} more변경={more변경} alert변경={alert변경} dispatch= {props.dispatch}/>
              : null    
            }
     

    function More(props){

      return (
        <button className="btn btn-primary" onClick={()=>{
          props.alert변경(true);
          axios.get('https://codingapple1.github.io/shop/data2.json') 
          .then((result)=>{
            props.alert변경(false);                                           
            props.dispatch({type : '신발추가', payload : result.data });
            props.more변경(false);
          })
          .catch((result)=>{
            props.alert변경(false);
            props.more변경(false);
            console.log('실패 했어요')
         
          })
        }}>더보기
        </button>
      )
    }

     

     

    #7090

    codingapple
    키 마스터

    리덕스 문법인 dispatch는 컴포넌트하단에서 connect()(컴포넌트명) 해주셔야 props.dispatch도 사용가능합니다

    app이 부모 detail이 자식입니다

    detail안에 more가 있으면 app에게는 손자겠군요 

    부모가 가진 state혹은 정보를 자식도 사용하게 만들고 싶으면 props문법으로 전송해주어야합니다 

     

    #7091

    명쾌한 답변정말 감사합니다!! 

    connect를 해야 직접 리덕스랑 연결하는거군요!

     근데 이런식으로는 못쓰나보네요

    export default connect(state를props화)(App, More)

    이럴경우 보통 부모에게서 리덕스를 받아서 아니면 

    다른페이지를 만들어서 export default connect(More) 이렇게 쓰나요? 

    #7093

    codingapple
    키 마스터

    파일 하나에서 두개 이상의 컴포넌트를 리덕스와 connect하고 싶으면 

    connect(mapStateToProps)(App)

    connect(mapStateToProps)(More)

    따로 쓰라고 되어있을걸요아마 근데 이 경우 export default 문법은 중복해서 두번 쓸 수 없어서

    export connect()

    export connect()

    어쩌구로 해주셔야합니다 그래서 import할 때도 귀찮기 때문에 connect 대신에 redux에 숨겨져있는 hook 문법인

    useDispatch, useSelector 라는 훅을 react-redux 에서 import 해오시면 약간 코드 양이 줄어들 수 있습니다 

     

    #7173

    앗 네 hook에대해 더 공부해야겠어요 감사합니다! 

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