localStorage.setItem('데이터이름', '데이터'); // 데이터를 추가한다.
localStorage.getItem('데이터이름'); // 데이터를 읽는다.
localStorage.removeItem('데이터이름'); // 데이터를 삭제한다.
localStorage.setItem('obj', JSON.stringify({name:'kim'}) );
var a = localStorage.getItem('obj');
var b = JSON.parse(a)
: 상세페이지에 들어가면 현재 페이지에 있는 상품 id를 localStorage에 저장되게 만들기
function App() {
useEffect(()=>{
localStorage.setItem('watched', JSON.stringify( [] ))
},[])
}
function Card(props) {
let navigate = useNavigate();
return (
<>
<Col>
<img
src={"https://codingapple1.github.io/shop/shoes" + props.i + ".jpg"}
width="80%"
onClick={() => {
navigate(`/detail/${props.i - 1}`);
}}
></img>
<h4>{props.shoes.title}</h4>
<p>{props.shoes.price}</p>
</Col>
</>
);
}
<div className="col-md-6">
<img src={`https://codingapple1.github.io/shop/shoes${result.id + 1}.jpg`}
width="100%"
/>
</div>
(Detail.js)
localStorage.setItem("watched", [id]);
(Detail.js)
useEffect(() => {
let watchArr = localStorage.getItem("watched");
watchArr = JSON.parse(watchArr);
watchArr.push(id);
watchArr = new Set(watchArr);
watchArr = Array.from(watchArr);
localStorage.setItem("watched", JSON.stringify(watchArr));
});
작동이 원활하지가 않다...🥲
새로고침을 한 직후에는 바로 저장이 되지만 다른 창을 다녀오면 작동도 되지 않고 localStorage에 값도 저장 되지 않는다.
1. 누가 Detail 페이지에 접속하면
2. 현재 페이지에 보이는 상품 id를 가져와서
3. localStorage에 watch 항목에 있던 [] 에 추가해주세요.
📗 useEffect() 사용법
- 기본형태 : useEffect (function, deps)
function : 수행하고자 하는 작업
deps : 배열형태이며 배열 안에는 검사하고자 하는 특정 값 or 빈 배열을 집어넣는다.- useEffect 는 어떤 값의 변화가 감지되면 실행되어
특정 함수나 작업을 실행하는 함수이다.- 렌더링이 끝나면 무조건 한 번은 useEffect 가 실행된다.
- useEffect 에 대괄호[] 를 사용하면, 렌더링 후 무조건 단 한 번만 실행된 후 더이상 실행되지 않는다.
- deps 자리에 변수를 지정하게 되면 다른 값과 상관 없이
지정된 값이 변해야만 useEffect() 가 실행된다.
(Detail.js)
let result = props.shoes.find((x) => x.id == id);
...
useEffect(()=>{
console.log(result.id)
}, [])
이제 3번 localStorage에 watch 항목을 추가하는 것은
localStorage에 있던 기존 데이터를 수정하는 것은 불가능하다고 했다. (입력/출력 만 가능하다.)
즉 수정하려면 watch에 있던 [] 를 빼서 result.id를 추가하고
다시 watch 항목으로 저장하는 식으로 코드를 짜야한다.
useEffect(() => {
let watchedArr = localStorage.getItem("watched");
watchedArr = JSON.parse(watchedArr);
watchedArr.push(result.id);
// Set 으로 바꿨다가
watchedArr = new Set(watchedArr);
// 다시 array 로 변환했다.
watchedArr = Array.from(watchedArr);
localStorage.setItem("watched", JSON.stringify(watchedArr));
}, []);
function App() {
useEffect(() => {
let watchedArr = localStorage.getItem("watched");
if (watchedArr == null) {
localStorage.setItem("watched", JSON.stringify([]));
} else {
watchedArr = JSON.parse(watchedArr);
}
}, []);
폼 미치따이