Comments (1)
겪은 문제
state의 비동기 업데이트로 인해 setState 이후에 바로 다시 setState하면 이전 데이터로 덮어씌워지는 현상
분명 데이터 fetchCards(page)를 해서 데이터를 불러온 다음 현재 페이지를 toggle해서 넘겨야 하는데 넘어가지 않았다.
페이지를 토글한 데이터를 setCardList하고 새 데이터를 fetch해와서 setCardList[...cardList, ...새 데이터] 처럼 기존 state를 스프레드해서 뒤집어 씌웠는데, state가 비동기 업데이트되어 이전 데이터가 덮어씌워진 것이다. 그래서 페이지 flip과 zIndex가 토글되지 않아 페이지가 넘어가지 않은 것이다.
그래서 거의 동시에 state에 접근해서 바로 setState가 반영이 안되는 문제를 해결하게 위해 callback을 쓰고 싶었는데 클래스형 말고 함수형 컴포넌트에서 쓰는 useState hook은 callback 함수를 인자로 받을 수 없었다. 그래서 useEffect로 처리하는 방법을 선택했다.
해결 방법
내가 원하는 동작은 다음 버튼을 눌러 location을 1 추가시켰을 때 만약 4의 배수번째 페이지라면 다음 데이터를 fetch해오는 것이다. 핵심은 'location이 변할 때'라는 것이기 때문에 초기 데이터 로드를 위한 useEffect 말고 또 새로운 useEffect를 만들고, dependencies 배열에는 location을 줬다. useEffect 안에는 만약 (4의 배수번째 location이고 마지막 페이지가 아니며, 뒤로가기 버튼을 눌렀다가 다시 다음 버튼을 눌러 이미 불려왔던 데이터가 없다면)이라는 조건을 주고 그 때만 fetch하도록 해서 location이 변할 때 무조건 fetch하지 않도록 했다.
(사실 처음에는 디펜던시 배열 안에 IDE에서 추천해주는 대로 자동완성을 눌러서 값을 집어넣었는데 무한로딩이 일어나서 진짜로 데이터를 fetch해오는 trigger인 location만 집어넣었다. 노란 밑줄이 신경쓰이기는 하지만 내가 원하는 동작의 trigger가 무엇인지 생각해서 진짜로 필요한 것만 집어넣도록 하자.)
from phoca-review.
Related Issues (20)
- API document에 맞게 백엔드의 필드 구조와 로직을 수정한다.
- API 요청을 위한 환경설정을 한다.
- 카드 create API에 요청을 보내 카드를 생성하는 기능을 구현한다. HOT 2
- GET cards를 할 때 총 몇 개의 카드가 존재하는지 서버에서 값을 보내주도록 한다. HOT 1
- 앨범에서 카드를 클릭하면 카드 상세정보 페이지가 모달로 뜨게 라우팅 및 마크업을 한다.
- 앨범에서 카드를 누르면 상세정보를 조회할 수 있다.
- 카드 상세페이지에서 카드 뒤집기 기능을 추가한다. HOT 1
- 카드 상세정보 모달창에서 바깥 영역을 누르면 창이 닫히는 기능 추가 HOT 1
- 카드 수정 페이지를 만들고 저장된 카드 정보를 불러와 화면에 보여준다.
- Card Class를 만들어 submit 데이터를 만드는 과정을 추상화한다.
- 서버의 카드 update API에 발생하는 에러를 수정하고, update 페이지의 제출 버튼에 API 요청을 바인딩한다. HOT 1
- 카드 삭제를 확인하는 모달창을 마크업 하고, 모달창이 닫히는 기능을 구현한다.
- 카드 삭제 버튼을 누르면 카드 삭제 API에 요청하는 기능을 추가한다.
- 카드 삭제 후 메인으로 이동되었을 때 Book의 카드 목록에 삭제가 반영 안되는 문제 해결 HOT 1
- 카드 상세 페이지에서 카드를 이미지로 다운받을 수 있는 기능을 추가한다. HOT 1
- 카드 fetch 함수에서 페이지 가공하는 로직을 함수로 분리하고, 데이터를 알맞은 state 변수에 담도록 고친다.
- 카드 에디터 화면을 벗어나려고 하면 경고해주는 기능을 추가하자. HOT 1
- 페이지 전환 시 애니메이션 효과를 준다.
- 카드 에디터를 반응형 디자인으로 개선한다.
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from phoca-review.