react 와 redux-toolkit , jsonserver를 이용하여 CRUD 및 구현을 하였고 여러가지를 하면서 비동기에 대한 이해도, react state관리에 대한 이해도가 많이 늘었다. 하지만 아직까지 이해 못한 부분도 많고 공부 해야할게 많다.
React
redux-toolkit 라이브러리를 설치해서 상태관리를 하였고 리액트,리덕스 훅들을 사용해서 state들을 받아오거나 보내줬다. 다들 첫 프로젝트라 코드가 복잡하고 지저분 하지만 앞으로 꾸준히 공부해서 가독성 좋은 코드, 보다 효율적인 로직을 짤 것이다.
javascript
이번 프로젝트를 하면서 자바스크립트 문법의 중요성을 다시 한번 깨달았다. js를 공부한 시간은 많지만 더욱 깊게 알아야 할것들이 많다는것을 알게되었다.
코드컨벤션
어느 프로젝트를 하던간에 팀원들 끼리 규칙을 정할것이다.
// 상품 추천 랜덤 함수
const Randomkimchi = [];
let allKimchis = data;
for (let i = 0; i < 4; i++) {
let randomNum = Math.floor(Math.random() * allKimchis.length);
Randomkimchi.push(allKimchis[randomNum]);
allKimchis.splice(randomNum, 1);
}
console.log(Randomkimchi)
문제점 ➡ 리액트는 배열이나 객체 데이터의 변화를 감지하여 정상 작동하도록 한다. push
참조 자료형의 가변 내장 함수를 사용하면 내부의 데이터는 변하더라도 그 주소값은 그대로 이다. 이것은 데이터 무결성 제약 조건 위배
에 해당하여 문제를 발생시킬 여지를 남긴다. 무결성을 유지하려면 기존 데이터를 수정하는 가변 내장 함수(push, unshift, pop, splice)를 사용하면 안된다. 해결 방법 ➡ 새로운 값을 기존 값에 push를 해주고 리액트가 변화를 감지할 수 있도록 새로운 배열을 만들어 state가 변경되었음을 인지하도록 해주었다.// 상품 추천 랜덤 함수
const Randomkimchi = [];
let allKimchis = data;
for (let i = 0; i < 4; i++) {
let randomNum = Math.floor(Math.random() * allKimchis.length);
Randomkimchi.push(allKimchis[randomNum]);
console.log(Randomkimchi);
allKimchis.splice(randomNum, 1);
console.log(allKimchis);
}
setRecommendedProduct(Randomkimchi);
};
// components/Kimchi.jsx
<Icon
onClick={() => {
navigate('/cart');
window.location.reload();
}}
>
변경 방식 특정 페이지 component 내부에서 scrollTo 메소드 사용 ⇒ 새로고침을 하지 않고 스크롤을 이동할 수 있음.// pages/Cart.jsx
export default function Cart() {
useEffect(() => {
// 페이지 이동 시 최상단으로 스크롤
window.scrollTo(0, 0);
}, []);
return (...)
}
+,
-
버튼 클릭 시 수량에 따라 값은 잘 출력 되지만 다른페이지를 이동 후 또는 밑에 페이지를 클릭 후 다시 해당페이지로 오면 price 값만 초기화 되었고 수량은 값이 그대로 남아있었다. + 무한루프 에러까지 발생....useEffect(() => {
getData();
console.log(currentPath);
if (currentPath === `/kimchis/${id}` || currentPath === `/kimchis/${id}/`) {
navigate(`/kimchis/${id}/description`, { replace: true });
}
}, []); // 원래는 currentPath, navigate,id,getData 이 들어있었음
밑에 페이지 클릭시 해당 state값이 잘 남아 있다. 일단은 해결 했다.window.location.reload()
를 통해서 페이지 이동시 스크롤 맨위로 이동 되는 로직이 있었다. window.location.reload()
onClick={() => {
navigate('/cart');
window.location.reload();
}}