userefによるチャットUIの実装
useref文法は習ったことがありますが、適当な使い方が見つからないので、今回使ったことがありますが、思ったより簡単なので、簡単に使えます.
このようにUIを取得し、チャットを入力します.
現在の時間と入力された内容がチャットリストに追加されていることがわかります.
チャットデータの基本構造
現在時間はmoment()でデータを受信しています.
Inputでは転送ボタンを押さず、Enterキーを押すときも以下のように動作したいので、InputタグにonKeyPressを使用しました.
このようにUIを取得し、チャットを入力します.
現在の時間と入力された内容がチャットリストに追加されていることがわかります.
チャットデータの基本構造
const [chatList, setChatList] = useState([
{
no: 1,
id: 'student1',
chat: 'hahahahahaha',
date: '11-16 15:34:49'
},
{
no: 2,
id: 'student2',
chat: 'hahaha',
date: '11-16 15:34:49'
},
{
no: 3,
id: 'student3',
chat: 'hahaha',
date: '11-16 15:34:49'
},
{
no: 4,
id: 'student4',
chat: 'hahaha',
date: '11-16 15:34:49'
},
{
no: 5,
id: 'student5',
chat: 'hahaha',
date: '11-16 15:34:49'
},
]);
ユーザ入力時には,入力内容でチャットリストを再編成する必要があるため,今回もhookを用いた.現在時間はmoment()でデータを受信しています.
const nowTime = moment().format('MM-DD HH:mm:ss');
チャットリストに追加するには、[コミット](Submit)ボタンを押します.const handleAddChat = () => {
if (chatContents.length === 0) {
alert('채팅 내용을 입력해주세요')
} else {
setChatList(prev => [...prev,
{
no: chatList.length + 1,
id: `student${chatList.length+1}`,
chat: chatContents,
date: nowTime
}
])
}
}
チャットするたびに、スクロールは一緒に下に移動します.<div className="ChatWrapper">
<div className="chatList" ref={chatInput}>
{
chatList.map((item) => {
return (
<div className="chatContents">
<span className="id">{item.id}</span>
<span className="chat">{item.chat}</span>
<span className="date">{item.date}</span>
</div>
)
})
}
</div>
<div className="chatArea">
<input
type="text"
value={chatContents}
onChange={(e)=>setChatContents(e.target.value)}
onKeyPress={pressEnter}
/>
<button onClick={() =>handleAddChat()}>전송</button>
</div>
</div>
スクロールするdivラベルにrefと書きます. useEffect(()=>{
setChatContents('')
scrollToBottom()
},[chatList])
const scrollToBottom = () => {
const {scrollHeight, clientHeight} = chatInput.current;
chatInput.current.scrollTop = scrollHeight - clientHeight
}
chatlistの値が変更されるたびに、関数が呼び出されます.Inputでは転送ボタンを押さず、Enterキーを押すときも以下のように動作したいので、InputタグにonKeyPressを使用しました.
Reference
この問題について(userefによるチャットUIの実装), 我々は、より多くの情報をここで見つけました https://velog.io/@yerim1935/useRef-사용해서-채팅-UI-구현하기テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol