socket.io ๋ก ์ฑํ ์ฐฝ๐ ๊ตฌํํ๊ธฐ

์ธ๋ก์ด 1์ธ ์ฑํ . . . ๐ฅฒ
๊นํ๋ธ ์ฝ๋๋ณด๊ธฐ
์ ๋งํฌ์์ ์ฝ๋ ํ์ธ ๊ฐ๋ฅํฉ๋๋ค ๐
์์ ๊ณ๊ธฐ
noSQL ์ ์ ํด๋ณผ ๊ธฐํ๊ฐ ์์ด ์ด๋ค ํ๋ก์ ํธ๋ฅผ ์งํํ๋ฉด ์จ๋ณผ ์ ์์๊นโฆ ๊ณ ๋ฏผํ๋ ๋์ ์ฑํ ์ด ๋ ์ฌ๋๋ค. ์ต๊ทผ์ ์๋ฐ๋ก ์ฌ์ดํธ ํ๋ ๊ตฌํํ์ผ๋ ์ด๋ฒ ํ๋ก์ ํธ๋ ๋ฆฌ์กํธ๋ก ์์ ํ์๋ค. ๋ฆฌ์กํธ์ ์ฅ์ ์ค ํ๋์ธ ๊ธ๋ก๋ฒ ์ํ๊ด๋ฆฌ์๋ ์ ๊ฒฝ์ ์ฐ๋ฉฐ ์์ ํ๋ค โผ๏ธ ์๋ฒ๋ node.js ๊ธฐ๋ฐ express ๋ฅผ ์ฌ์ฉํ๋๋ฐ SQL ์์ ํ๋ฉด์ ์คํ๋ง ๋ถํธ๋ก ๋ฐ๋ ์๋ ์๋ค. ๐ฎ
ํ๊ฒฝ ๊ตฌ์ฑ
- Front:
- React.js
- Server:
- Node.js
- express
- socket.io
โญ๏ธ ์ฒดํฌ ํฌ์ธํธ โญ๏ธ
const socket = io.connect("http://localhost:4000");
/src/ChatContext.js
์ปค๋ฅ์
์์๋ ๊ธ๋ก๋ฒ ์ํ๊ด๋ฆฌ ์ฝ๋ ์ชฝ์ ์์ฑํด์ฃผ์๋ค.
useEffect(() => {
socket.on("receive chat", (message) => {
setChatList((chatList) => chatList.concat(message));
dispatch({
type: "CHANGE_NAME",
name: message.name
});
});
}, []);
ChatContext.js
์ฑํ
์
๋ ฅ ํ ์ด๊ธฐํ ๋๋ name ๊ฐ์ ์ฝ๋ฐฑ์ ๋ค์ด์๋ ๋ฐ์ดํฐ๋ก ๋ค์ ์ฑ์์ฃผ์๋ค.
function ChatContentBox(){
const messageBoxRef = useRef();
const chatList = useChatList();
const scrollToBottom = () => {
if (messageBoxRef.current) {
messageBoxRef.current.scrollTop = messageBoxRef.current.scrollHeight;
}
};
useEffect(() => {
scrollToBottom();
}, [chatList]);
return(
<div className="chat-wrap">
<div className="container">
<div className="chat-content-box" ref={messageBoxRef}>
{ chatList.map((el, index) => (
<div className="chat" key={index}>
<div className="chat-name">{el.name}</div>
<div className="chat-message">{el.message}</div>
</div>
))
}
</div>
</div>
</div>
)
}
/src/Components/ChatContentBox.js
์ ๋ฉ์์ง๋ฅผ ๋ฐ์ ๋ ๋ง๋ค ์คํฌ๋กค์ด ๋งจ ์๋์ ์์นํ๊ธฐ ์ํด useRef ๋ก DOM์ ์ปจํธ๋กค ํ์๋ค.