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

home2 게시판 React 게시판 상품 데이터 더 받아오기 질문

상품 데이터 더 받아오기 질문

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

    홍승진
    참가자
    [리액트에서 서버와 통신하려면 ajax 2 : post, fetch] 강의 숙제는 다음과 같이 완료했는데
    상품 링크로 연결된 detail 페이지 갔다오면 btnCount가 초기화되어서 더보기 버튼이 또 생기네요.
    이건 어떻게 해결하면 될까요? 
    어떤 것에 대한 이해가 부족한걸까요...
    
    
    #46259

    홍승진
    참가자
    선생님 질문 하나만 더 할게요.. 컴포넌트 전환 애니메이션에서 
    useEffect를 재활용 할 순 없나요?
    
    TabContent 컴포넌트에 useEffect를 다음과 같이 사용하고 
    
    const TabContent = ({ tab, fade, setFade }) => {
    useEffect(() => {
    const a = setTimeout(() => {
    setFade("end");
     }, 10);
    return () => {
    clearTimeout(a);
    setFade("");
     };
     }, 

    ); return ( <div className={`start ${fade} `}> {[<div>내용0</div>, <div>내용1</div>, <div>내용2</div>]

    } </div> ); }; TabContent가 종속되어 있는 Detail 컴포넌트에 const [fade, setFade] = useState(""); useEffect(() => { setFade2("end"); return () => { setFade2(""); }; }, []);
    return (
        <div className={`start ${fade2} `}>
         생략~
         <TabContent tab={tab} fade={fade} setFade={setFade} />
        </div>
    )
    
    다음과 같이 했는데 tab버튼을 누를때 detail 컴포넌트의 애니메이션도 계속 발생하네요.
    빡통식 정리에서 
    useEffect(()=>{}, []) --> mount시 1회 코드 실행
    useEffect(()=>{}, 

    ) -->tab이 변경될때마다 코드 실행이라고 해서 될 줄 알았는데 아닌가봐요.. useState를 다른 이름으로 또 만드는 수 밖에 없을까요? 아니면 같이 쓸 수 있는 방법이 있나요?
    
    
    		
    	
    #46270

    codingapple
    키 마스터
    새로고침되면 state도 리셋됩니다 navigate()로 페이지이동합시다 
    state는 따로만듭시다
    #46316

    홍승진
    참가자
    선생님 링크는 전부다 navigate()로 했는데 그러네요.
    더보기 버튼 횟수는 btnCount state에 저장하고 있습니다.
    새로고침이 안되고 있다고 생각했는데 새로고침이 되고 있는 걸까요?
    
    #46347

    codingapple
    키 마스터
    다시 메인페이지로 돌아오는것도 navigate() 잘 쓰고 있나요 
    btnCount도 의심스러운 곳들에서 출력해봅시다
    #46360

    홍승진
    참가자
    선생님 navigate()는 문제가 없었고
    더보기 버튼 클릭하고 디테일 페이지에 갔다가 다시 돌아오면 (뒤로가기, navigate("/") 둘 다)
    더보기로 추가한 상품은 그대로 남아있는데 (--> shoes 어레이에 추가한 데이터는 그대로)
    사라졌던 더보기 버튼은 다시 생성되어 있는 것이 의아하여 (--> btnCount의 데이터는 리셋)
    아래와 같이 Main 컴포넌트에 있던 btnCount state를 App으로 빼고 (shoes는 원래 App에 있었음)
    Main 컴포넌트에서 props로 state를 적용해봤더니 원하는 대로 
    디테일 페이지에 들어갔다 나와도 btnCount가 바뀌지 않네요.
    
    제가 이해하기로는 현재 구조상 "/detail" 페이지로 가면 "/"페이지에 있던 <Main/>은 삭제되고
    다시 "/"페이지로 왔을 때 <Main/>이 재랜더링 되기 때문에 그 안에 있는 btnCount도 초기화 되는 것으로 이해했는데
    제대로 이해한 게 맞나요?
    
    그럼 어떤 state를 초기화시키고 싶지 않으면 
    1. 
    무조건 App에다 생성한다.(물론 navigate()로만 이동)
    2. 
    <Route path="/" element={<Main />}>
      <Route path="/detail" element={<Detail />}/>
    <Route>
    이런식으로 구성하면 "/detail"페이지에 들어가도 Main에 저장한 state가 초기화되지 않음.(이것역시 navigate()로만)
    (다만, <Main/>컴포넌트가 "/detail"페이지에도 남아있을테니 UI적으로 한계가 있을수도???있나요..?)
    
    3.
    서버, 로컬스토래지에 저장하면 navigate()로 가든 새로고침을 하던 뭘하던 저장.(지금 배우는 중..)
    
    이렇게 세 가지로 이해했습니다.
    제대로 이해한걸까요?
    위에 두 가지는 제가 잘못 이해했거나 다른 방법이 있으면 좋겠는데
    선생님 확인 한번 부탁드리겠습니다!
    
    
    #46373

    codingapple
    키 마스터
    컴포넌트사라지면 state도 리셋됩니다 
    1 2 3 다 맞는데 2처럼 페이지 구조를 변경하는건 좋아보이진 않습니다 
    리덕스에 넣어두거나 바깥에 변수만들어도 됩니다
    #46461

    홍승진
    참가자
    감사합니다 선생님
8 글 보임 - 1 에서 8 까지 (총 8 중에서)
  • 답변은 로그인 후 가능합니다.

About

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

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

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