-
Notifications
You must be signed in to change notification settings - Fork 2
๐ input ํ๊ทธ์ ํ๊ธ ์ ๋ ฅ ํ, Enter๋ฅผ ๋๋ฅด๋ฉด ํจ์๊ฐ ๋๋ฒ ํธ์ถ๋๋ ์ค๋ฅ
- ์ ๋ ฅ์ฐฝ์ ๊ฐ์ ์ ๋ ฅํ๊ณ , ์์ send ์์ด์ฝ์ ๋๋ฅด๋ฉด ํจ์๋ฅผ ํธ์ถํ์ฌ, ์์ผ์ ํตํด ๋ฉ์ธ์ง๋ฅผ ์ ์กํ๋๋ก ๊ตฌํ๋ ์ํ
- ์
๋ ฅ์ฐฝ์ ๊ฐ์ ์
๋ ฅ ํ๊ณ , Enter๋ฅผ ๋๋ ค๋ ํจ์๋ฅผ ํธ์ถํ๋ ๊ธฐ๋ฅ์ ์ถ๊ฐํ๊ณ ์, ๋ค์๊ณผ ๊ฐ์ด
onKeyDown
์ด๋ฒคํธ๋ฅผ ์ถ๊ฐ
export default function ChatInput() {
const [message, setMessage] = useState('');
const { roomId } = useParams();
// ์์ผ์ ํตํด ๋ฉ์ธ์ง๋ฅผ ์ ์ก
const sendMessage = () => {
socket.emit(
'message',
{ message: message, roomId: roomId },
(response: any) => {
console.log(response);
},
);;
setMessage('');
};
const handleOnKeyDown = (
e: React.KeyboardEvent<HTMLInputElement>,
) => {
if (e.key === 'Enter') {
console.log('Enter');
sendMessage();
}
};
return (
<div>
<div className="flex flex-row">
<input
type="text"
placeholder="์ฑํ
์ ์
๋ ฅํ์ธ์"
className="bg-grayscale-700 rounded-lg w-full p-3 mr-2 focus:outline-none"
onChange={(e) => setMessage(e.target.value)}
value={message}
onKeyDown={handleOnKeyDown}
/>
<button onClick={sendMessage}>
<SendIcon />
</button>
</div>
</div>
);
}
-
input
ํ๊ทธ์onKeyDown
์ด๋ฒคํธ๋ฅผ ๋ฌ๊ณ ,key
๊ฐEnter
๋ผ๋ฉด ์์ผ ๋ฉ์ธ์ง๋ฅผ ์ ์กํ๋๋ก ๊ตฌํ
โ๏ธ ์ด๋ฒคํธ๊ฐ 2๋ฒ์ฉ ๋ฐ์ํ๋ ์ค๋ฅ ๋ฐ์!!
์ด์ํ ์ ์ ์์ด๋ ํน์๋ฌธ์๋ฅผ ์ ๋ ฅํ๋ฉด ๋ฌธ์ ๊ฐ ์์ง๋ง, ํ๊ธ์ ์ ๋ ฅํ๋ฉด ๋ฌธ์ ๊ฐ ๋ฐ์ํ๋ค
IME(Input Method Editor) ๋๋ฌธ์ด์๋ค
IME๋ ํ๊ธ๊ณผ ๊ฐ์ด ์์๊ณผ ๋ชจ์์ด ๋ถ๋ฆฌ๋์ง ์๊ณ ํ ๊ธ์๋ก ์ ๋ ฅํ ์ ์๋๋ก ๋์์ฃผ๋ ์์คํ ์ํํธ์จ์ด์ด๋ค
๋ง์ง๋ง์ผ๋ก ์ ๋ ฅ๋ ๊ธ์๊ฐ ์์ฑ๋ ๊ธ์์ธ์ง,์๋ฃ๋์ง ์์ ๊ธ์์ธ์ง ์ ์ ์๊ธฐ๋๋ฌธ์, ๊ฐ ์ํ์ ๋ํด 2๋ฒ ํธ์ถํ๋ ๊ฒ์ด๋ค
ํ๊ธ์ด ์์ฑ๋ ์ํ๋ฅผ ์์์ผํ๋๋ฐ, event ๊ฐ์ฒด์ isComposing
์ ํตํด ์ ์ ์๋ค
๋ฆฌ์กํธ๋ ํฉ์ฑ ์ด๋ฒคํธ(SyntheticBaseEvent) ์ด๋ฏ๋ก naviteEvent
์ ๋จผ์ ์ ๊ทผํด์ isComposing
์ ๊ฐ์ ธ์์ผ ํ๋ค
const handleOnKeyDown = (e: React.KeyboardEvent<HTMLInputElement>) => {
if (e.nativeEvent.isComposing) {
return;
}
if (e.key === 'Enter') {
sendMessage();
}
};
- ์์ฑ๋์ง ์์ ์ํ(
isComposing === true
) ์ธ ๊ฒฝ์ฐ, ๋ฐ๋ก ๋ฐํํ๋ค
๐ ffmpeg๋ stderr๋ก ๋๋ฒ๊น
์ ํ๋ ์ด์
๐ HLS ํ๋กํ ์ฝ์ ๊ดํ ์ ๋ฆฌ ๋ฐ FFmpeg ์ฌ์ฉ๊ธฐ
๐ ๋นํธ๋ tsconfig.json์ด ์ธ ๊ฐ?
๐ NestJS ๊ธฐ๋ณธ ๊ฐ๋
- Modules
๐ Socket.io ์ต(๊ฐ)์ ํ
๐ ๋์ปค์ nginx์ ์ฌ์ฉ๊ธฐ
๐ ๋ถํํ
์คํธ๋ฅผ ํด๋ณด์
๐ FSD ์ฌ์ฉ๊ธฐ, ๊ทผ๋ฐ ์ด์ ๋๋ง์ ๊ท์น์ ๊ณ๋ค์ธ
๐ CICD ๊ตฌ์กฐ ์์
๐ ์จ๋ฒ ๋จ์๋ก ์คํธ๋ฆฌ๋ฐ ํ๊ธฐ (with HLS)
๐ HLS๋ก ์์
์ฃผ๊ณ ๋ฐ๊ธฐ
๐ vite + react + typescript ํ๊ฒฝ์์ path alias ์ค์
๐ React Scan์ด ๋ญ์ฃ ?
๐ ๋ก์ปฌ ํ๊ฒฝ ๊ฐ๋ฐ ๋ชจ๋ ๋ฐฐํฌ
๐ ์จ๋ฒ ์ ์ฒด๋ฅผ ์คํธ๋ฆฌ๋ฐํ๋ค๊ณ ? (with HLS)
๐ ์ฝ๋์ ์์ ์ฑ์ ๋์ด๊ธฐ ์ํด ํ
์คํธ์ฝ๋๋ฅผ ์์ฑํด๋ณด์
๐ ์๋ก๊ณ ์นจ ์ HLS ERROR
๐ input ํ๊ทธ์ ํ๊ธ ์
๋ ฅ ํ, Enter๋ฅผ ๋๋ฅด๋ฉด ํจ์๊ฐ ๋๋ฒ ํธ์ถ๋๋ ์ค๋ฅ
๐ nginx proxy pass๋ฅผ ๋ฐ๊ฟจ๋๋ ์๊ธด ์๋ฌ - ์ค์จ๊ฑฐ ์ธ์ ๋ฌธ์
๐ ๋ฐฐํฌ ํ๊ฒฝ์์ ํด๋ผ์ด์ธํธ-์๋ฒ WS handshake
๐ ๋ ๋๋ง ๋ฒ์ธ์ ํ๋!
๐ ๊ทธ๋ผ์ด๋ ๋ฃฐ
๐ฅ ํ์ ์๊ฐ
๐ ์ฝ๋ & ๊น ์ปจ๋ฒค์
๐ณ ๊น branch ์ ๋ต
๐ ๋
ธ์
๋ฌธ์ ์ ์ฅ์
๐จ ํผ๊ทธ๋ง
๐งโ๐ป ๊ธฐํ ๊ณต์ ๋ฐํ ์๋ฃ
๐ค 2์ฃผ์ฐจ ๋ฐํ ์๋ฃ
๐ ๋ฐฑ๋ก๊ทธ
๐ 1์ฃผ์ฐจ
๐ 2์ฃผ์ฐจ
๐ 3์ฃผ์ฐจ
๐ 4์ฃผ์ฐจ
๐ 5์ฃผ์ฐจ
๐๏ธ 1์ฃผ์ฐจ
๐๏ธ 2์ฃผ์ฐจ
๐๏ธ 3์ฃผ์ฐจ
๐๏ธ 4์ฃผ์ฐจ
๐๏ธ 5์ฃผ์ฐจ
โจ 1์ฃผ์ฐจ
โจ 2์ฃผ์ฐจ
โจ 3์ฃผ์ฐจ
โจ 4์ฃผ์ฐจ