간단한 react 여쭤봐도 될까요..? localstorage.

간단한 react 여쭤봐도 될까요..? localstorage.

QA

간단한 react 여쭤봐도 될까요..? localstorage.

본문

자식에서 부모컴포넌트로 데이터 보낼 때 

localstorage 로 hipage값이 저장되서 새로고침해도 페이지가 유지되게 하려고합니다.

아래 코드로 hipage값이 저장은 되었는데 

저장된 값을 어떻게 써도 값이 유지가 안되더라구요.

다른거 찾아봐도 안나와서ㅠㅠ 

기초지만 여쭤보고 싶습니다. 


 
const App = () => {
 
const [hipage, setHipage] = useState(3)
const getData = (hipage) => {
    localStorage.getItem("page");
    setHipage(hipage);
};
 
return (
    <>
      <div className="oneview">
        {hipage === 0 && (
          <Nicname
            hipage={hipage}
            getData={getData}
            userName={userName}
            onChangeInput={onChangeInput}
          />
        )}
 
        {hipage === 1 && <Date hipage={hipage} getData={getData} />}
 
      </div>
    </>
  );
};

 

<Nicname> 랑 <Date> 컴포넌트 안에 

아래 버튼 코드가 있는데 누르면 hipage 값이 증가 또는 감소하면서 페이지 보이는게 달라집니다. 

 

       <div className="pnbutton">

          <button onClick={onPrev}>

            이전{" "}

            <img src={`${process.env.PUBLIC_URL}/assets/img/right_ar.svg`} />

          </button>

          <button onClick={onNext}>

            다음{" "}

            <img src={`${process.env.PUBLIC_URL}/assets/img/right_ar.svg`} />

          </button>

        </div>

이 질문에 댓글 쓰기 :

답변 2

이건 contaxt api를 활용하지 않거나 redux같은 상태관리를 사용하지 않으실거면 hipage와 setHipage,

스테이트값과 스테이트를 업데이트 하는 함수 2개를 같이 자식 컴포넌트로 내려주셔서 자식컴포넌트에서 부모에게서 받은 스테이트를 업데이트 하실수있도록 하셔야하며 로컬스토리지에 저장하시러면 리액트의 일반함수에선 setItem을 쓸수 없기에 useEffect를 활용해 hipage값이 변경될때만 hipage를 setItem해주시면 되겠습니다.


// App.js
import { useState, useEffect } from 'react';
const App = () => {
  const [hipage, setHipage] = useState(localStorage.getItem('page') ? localStorage.getItem('page') : 3 );
  useEffect(() => {
    const storageData = localStorage.getItem('page');
    if (!storageData) {
      localstorage.setItem('page', hipage);
    }
  }, [ hipage ]);
  return (
    <>
      <div>
        {hipage === 0 && (
          <Nicname
           hipage={hipage}
           setData={setHipage}
           userName={userName}
           onChangeInput={onChangeInput}
          />
        )}
      </div>
    </>
  )
};
// Nicname.js
import { useCallback } from 'react';
const Nicname = ({ hipage, setData, userName, onChangeInput }) => {
  const onChangeHipage = useCallback((i) => {
    setData(i);
  }, [ hipage ]);
  return (
    <>
      <button onClick={() => onChangeHipage(hipage - 1)}>이전</button>
      <button onClick={() => onChangeHipage(hipage + 1)}>다음</button>
    </>
  )
};

답변을 작성하시기 전에 로그인 해주세요.
전체 123,620 | RSS
QA 내용 검색

회원로그인

(주)에스아이알소프트 / 대표:홍석명 / (06211) 서울특별시 강남구 역삼동 707-34 한신인터밸리24 서관 1404호 / E-Mail: admin@sir.kr
사업자등록번호: 217-81-36347 / 통신판매업신고번호:2014-서울강남-02098호 / 개인정보보호책임자:김민섭(minsup@sir.kr)
© SIRSOFT