안녕하세요.
강의 너무 잘 듣고 있습니다.
다름이 아니라 메세지 렌더링 부분에 여쭙고 싶은게 있어서요.
MainPanel.js/
addMessageListner 부분입니다
let messagesArray = [];
this.state.messagesRef
.child(chatRoomId)
.on("child_added", (DataSnapshot) => {
console.log("added");
messagesArray.push(DataSnapshot.val());
// this.props.dispatch(setLoadMessges(messagesArray));
this.setState({ messages: messagesArray, messagesLoading: false });
});
제가 생각한 흐름대로라면, 현재 채팅방 1과 2가 있는 상태에서
1. 나는 현재 채팅방 1을 킨 상태이다.
2. 상대방이 채팅방 2에서 채팅을 친다.
3. 'child-added'로 인해 채팅방2의 새 메세지가 messageArray로 push된다.
4. setState로 인해 채팅방 2의 내용으로 리렌더링된다.
5.채팅방 1에 있던 사용자가 채팅방 2로 바뀐 현상이 나타난다.
인데 강사님의 코드를 사용하니 이런 문제가 발생하지 않더라구요.
다만 주석의 코드처럼 따로 리덕스 state에 messges를 만들어서 관리하니까 제가 말한 현상이 발생하구요.
혹시 강사님의 코드가 위의 저 흐름처럼 진행되지 않는 이유를 알 수 있을까요??
귀한 시간 내주셔서 감사합니다
답변 감사합니다!
제 생각은 이렇습니다.
사용자 A가 'child_added' 리스너를 방마다 달아두었으니 B가 2번방에서 채팅을 쳐서 DB에 메세지가 추가되면 그것을 A가 감지하여 state를 업데이트 하게 되는 것으로 생각했습니다.
리스너를 달아두면 옵저버처럼 옵션으로 넣어준 변화가 감지될 때마다 실행되는 것이 틀린 것일까요..?
헷갈리네요 ㅜㅜ