Я воссоздаю базовый чат из предыдущего проекта (ранее использовались Bootstrap и Socket), и для этого я использую компонент React для рендеринга чата (который состоит из области ввода имени пользователя, области вводадля текстового содержимого и div, в котором имя пользователя и сообщение должны отображаться вместе, т.е. "BugsBun01:" Что такое Doc ?! "). Я не уверен, должен ли я иметь пустой div, где содержимое чата принадлежит в отдельном компоненте React( моя конечная цель - иметь родительский компонент для немедленного обновления области чата при записи содержимого из полей вставки (имя пользователя и текстовое содержимое) в коллекцию базы данных )
У меня есть Mongoбаза данных, которая содержит коллекцию для чатов (имя пользователя / сообщение), но мой вопрос
A) как мне использовать axios для хранения вставленного имени пользователя и текста в коллекции, и
B) после сохранения как разрешить родительскому компоненту (React) немедленно обновить их до пустогоdiv (chatArea) из базы данных mongo, чтобы при обновлении страницы старые чаты пользователей все еще присутствовали?
Нужно ли componentDidMount ()?
Нужно ли промежуточное программное обеспечение в моем файле server.js?(bodyparser и т. д.)
Я довольно новичок в использовании React js, так что терпите меня.Также это довольно простой чат, который фокусируется на функциональности.
class Chat extends React.Component {
constructor(props){
super(props);
this.state = {
username: '',
message: '',
messages: []
};
}
render() {
return (
<div id="myChat">
<div id="status"></div>
<input type="text" id="username" class="form-control" placeholder="Enter Username..." value={this.state.username} onChange={ev => this.setState({username: ev.target.value})}>
</input>
<div id="chat">
<br></br>
<div class="card">
<div id="messages" class="card-block">
{this.state.messages.map(message => {
return (
<div>{message.author}: {message.message}</div>
)
})}
</div>
</div>
<br></br>
</div>
<textarea id="textarea" class="form-control" placeholder="Enter message..." value={this.state.message} onChange={ev => this.setState({message: ev.target.value})} ></textarea>
</div>
);
}
}