키워드 : doc -> 참조 데이터 / n.indexOf is not a function 오류
1) doc으로 받아온 반환값은 타입이 document(문서)이기 때문에 참조 데이터이다.
const docRef = doc(db, 'dictionary', dictionary_id)
참조값은 데이터를 받아와서 사용 할 수 없기 때문에
(await getDoc(docRef))
를 사용해서 docRef에 해당하는 데이터를 불러오면 promise 형태로 넘어온다.
(await getDoc(docRef)).data()
거기서 내가 원하는 값은 딕셔너리의 형태의 데이터이기 때문에 .data()를 사용한다.
2) 글 작성 후 새로고침 없이 수정이나 삭제를 할 경우 에러 발생
(새로고침을 하면 수정과 삭제가 에러 없이 잘 실행 된다.)
(문제점)
: 함수형 컴포넌트에서 useEffect()를 사용해서 컴포넌트가 처음 생성되면 dispatch(loadDictionaryFB())를 사용해서
firebase에 있는 값을 불러왔다.
(과정)
1) 컴포넌트가 ComponentMount() 될 때는 firestore(서버)에서 값을 받아 온다.
2) 글을 작성하고 수정이나 삭제 버튼을 누르면 n.indexOf is not a function 오류가 발생한다.
그런데 글 작성 후 새로고침을 하면 수정이나 삭제가 잘 된다.
3) ComponentDidMount() 될 때 데이터를 불러오는 데, ComponentWillMount() 때는 데이터를 못불러 올까라고 생각함
4) useEffect 코드를 다시 봤더니
React.useEffect(() => {
dispatch(loadDictionaryFB());
}, [])
ComponentWillMount()가 일어나는 조건을 넣어주지 않았다. [] 안에 어떤 값이 변경 되었을 때 ComponentWillMount()를 실행 할 지 넣어줘야 하는 데 그게 없어서 계속 ComponentDidMount() 때만 loadDictionaryFB()가 디스패치 됨.
-> 즉, 업데이트 되는 조건을 안넣어 놓고 왜 업데이트 안되지 한 거다.
5) 어떤 변수의 데이터가 변경 될때마다 디스패치가 일어날 지 생각 해다가 store의 값이 바뀌면 ComponentWillMount()가 일어나야 함으로 useInfo를 넣어더니 해결 되었다.
const useInfo = useSelector((state) => state.dictionary);
React.useEffect(() => {
dispatch(loadDictionaryFB());
}, [useInfo])
(해결)
ComponentWillMount가 발생하는 조건 넣어줬더니 해결됨
React.useEffect(() => {
dispatch(loadDictionaryFB());
}, [useInfo])
'더 알아보기 > 에러' 카테고리의 다른 글
[Error] git push origin master 시 failed to push some refs to 오류 (0) | 2021.12.13 |
---|---|
[Error] the slice reducer for key "feed" returned undefined. 에러 (0) | 2021.12.09 |
[Error] firebase.js import 에러 발생 (0) | 2021.12.01 |
[Error] react-script 에러 (0) | 2021.11.25 |
[Error] EC2 IP로 Pymongo 접속 시 Connet 오류 (0) | 2021.11.03 |
댓글