목차
- 폴더구조
- 단어 등록(add)
- 단어 조회(read)
- 단어 수정(update)
- 단어 삭제(delete)
- 무한스크롤 구현
- 개발 중 겪었던 이슈 사항
배포서버 - https://my-dictionary-5f4fc.web.app/
github -https://github.com/jinseoIT/study_react_sparta/tree/master/my_dictionary
1) Pages - Home.js(리스트 화면), AddPage.js (추가 화면)
2) components - Card.js(리스트에 그릴 card), Spinner.js( 로딩시 보여줄 화면)
3) config - dataCalc(현재시간 TimeStamp계산 js), firebase( firebase 설정)
4) redux modules - word.js( ducks 형태로 word관련 type, action, reducer 모음)
5) configStore.js - reducer들을 import한 후 createStore로 store 생성
6) App.js - Route를 지정하고 다른 컴포넌트들을 그리는 부모 컴포넌트 역할
7) index.js - Provider를 활용해 store를 선언, SPA의 메인인 index.html를 기반으로 ReactDOM.render
신조어 단어 등록 페이지를 함수형 컴포넌트 방식으로 AddPage.js 파일에 작성하였습니다.
사전 리스트가 나오는 메인 페이지를 함수형 컴포넌트 방식으로 Home.js 파일에 작성하였습니다.
const wordList
에 값을 할당합니다.wordList
의 기존 값이 없다면 두가지 action을 호출합니다.true
로 변경합니다. (action -> reducer -> is_loaded : trueFirebase Store
의 데이터를 가져오기위해 Middleware를 먼저 호출 합니다.getDocs
메서드를 활용하여 list data를 반환받습니다. 받은 데이터를 원하는 list형식으로 사용하기 위해 새로운 wordList를 만든 후 id, updateLock, doc.data()를 사용해 값을 넣은 뒤 getWord
Action을 인수 값을 넣고 호출합니다.Card 컴포넌트를 wordList 갯수만큼 map을 사용하여 화면에 그립니다.
단어 수정을 위해 Card.js에서 로직을 구현하였습니다.
store state의 wordList에서 수정할 단어의 아이디가 아닌 데이터들을 map을 사용 새로운 newWordList에 할당한 후 수정한 데이터만 spread 연산자를 사용하여 추가합니다.
단어 삭제를 위해 Card.js에서 로직을 구현하였습니다.
store state의 wordList에 filter를 사용하여 삭제할 아이디를 제외한 list를 newWordList에 할당하여 state에 넣어 return합니다.