일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 | 31 |
- 알고리즘
- 코딩
- trainning
- API
- JavaScript
- 자바스크립트
- Firebase
- K-Digital
- PROJECT
- 내일배움캠프
- type
- 리액트
- wil
- native
- 에러
- react
- 변수
- JS
- 타스
- 부트캠프
- 타입
- 프로젝트
- 내일배움
- Redux
- 온라인
- NEXT
- 개발자
- 프론트엔드
- rn
- 함수
- Today
- Total
Frontend 개발자 - hyo.loui
리액트 네이티브 - Todo-List, setState 제대로 하기(해결) 본문
❤️🔥TIL : Today I Learned
🎯목적 :
state가 업데이트 되어야 정상적으로 리액트가 렌더링을 해주는 것에 대한 복기
🤢 문제 내용 :
리액트 네이티브로 To-Do-List 앱을 만들고 있던 중 생긴 문제였다..
체크 아이콘이 클릭 되었을 때의 실행 함수이다
나름 로우코드를 해보겠다고 작성했다...
로그에 'isDone' 이 토글되어 잘 찍히길래 문제가 없겠구나 싶었다
그런데 문제는 단순하지 않았다.
setState를 하지 않았기 때문에 렌더링이 일어나지 않아서
실시간 렌더링이 안되어 다른 컴포넌트로 이동 후 (리액트나, 코딩테스트)
다시 돌아와야 정상적으로 보였다...(새로고침 처럼)
위처럼 isDone 이 true 라면
"line-through"가 되면서 아이콘도 변해야 하는데 바로바로 렌더링 되지 않았다....
🔨 시도한 방법
1. 힙의 값을 직접 바꿔버렸다...
isDone이 두번씩 찍히는 상황...
뭔가 잘못 됨을 깨닳았다
휩이 가지고 있는 값을 바꿔주려고 했고,
콜백 안에서 한번 더 map으로 콜백을 요청하고 있는 상황이니
의도와 다르게 이상하게 꼬여버렸다
얕은 복사를 활용해 보자
🎈 문제 해결 방법 : 2번 솔루션
근본적인 문제로 돌아가자 지금 현재 상태의 todos 값이 전부 필요했다
그래서 변수로 지금의 todos를 가져온 후
그 안에있는 데이터중의 Index 요소를 찾아 해당 데이터만을 바꿔줘보자
말로 풀어보자!
6 새로운데이터를 얕은복사
7 아이디가 같은 값의 인덱스번호 찾기
8 복사한 데이터 중 해당 인덱스 번호의 isDone 을 토글로 바꿔주기
9 setState 하여 복사한 데이터를 새로 추가!
그렇게 시도한 결과
위 코드로 해결했다
✨ 알게된 것
한번에 한 코드로 해결하려고 하지말고
논리적으로 접근하고 데이터가 어떤구조로 되어있고
어떤 것을 가지고 있는지를 항상 생각하며 코드를 짜야겠다!
'React-Navtive' 카테고리의 다른 글
리액트 네이티브 - CRUD: Update API (updateDoc( ) 활용하기) (0) | 2023.01.03 |
---|---|
리액트 네이티브 - CRUD: Read API (useEffect와 onSnapshot 활용하기) (4) | 2023.01.02 |
리액트 네이티브 - 'Todo-List' 수정 버튼 클릭 시 이전값이 계속 나오는 오류 (0) | 2023.01.02 |
리액트 네이티브 - CRUD: Create API, Firebase 연결하기 (1) | 2023.01.02 |
리액트 네이티브 - 새로운 프로젝트 만들기 (expo), 에러 해결 (0) | 2022.12.30 |