simple-chat-websocket-reactjs
Version:
### Props: In this article we will create a simple chat using websocket, nodeJs and ReactJs. From there you can play around and explore and add your own ideas and features.
82 lines (71 loc) • 2 kB
JavaScript
import React, { Component } from 'react'
import ChatInput from './ChatInput'
import ChatMessage from './ChatMessage'
const URL = 'ws://localhost:3030'
class Chat extends Component {
state = {
name: 'Ichlas',
messages: [],
}
ws = new WebSocket(URL)
componentDidMount() {
this.ws.onopen = () => {
console.log('connected')
}
this.ws.onmessage = evt => {
const message = JSON.parse(evt.data)
this.addMessage(message)
}
this.ws.onclose = () => {
console.log('disconnected')
this.setState({
ws: new WebSocket(URL),
})
}
}
addMessage = message =>
this.setState(state => ({ messages: [message, ...state.messages] }))
submitMessage = messageString => {
const message = { name: this.state.name, message: messageString }
this.ws.send(JSON.stringify(message))
this.addMessage(message)
}
render() {
return (
<div>
<div class="fixed-chat">
<div class="panel-chat">
<div class="header-chat">
<label htmlFor="name">
Name:
<input
type="text"
id={'name'}
placeholder={'Enter your name...'}
value={this.state.name}
onChange={e => this.setState({ name: e.target.value })}
/>
</label>
</div>
<div class="body-chat">
{this.state.messages.map((message, index) =>
<ChatMessage
key={index}
message={message.message}
name={message.name}
/>,
)}
</div>
<div class="message-chat">
<ChatInput
ws={this.ws}
onSubmitMessage={messageString => this.submitMessage(messageString)}
/>
</div>
</div>
</div>
</div>
)
}
}
export default Chat