【发布时间】:2018-12-07 03:06:44
【问题描述】:
我正在从以前的项目(以前使用 Bootstrap 和 Socket)重新创建一个基本的聊天,而这解决了我正在使用一个 React 组件来呈现聊天(它由一个用户名的输入区域、一个输入区域组成对于文本内容,以及插入的用户名和消息应该一起出现的 div,即“BugsBun01:“Whats up Doc?!”)。我不确定我是否应该将聊天内容所属的空 div 放在单独的 React 组件中(我的最终目标是让父组件立即更新聊天区域,同时将插入字段(用户名和文本内容)中的内容写入数据库集合)
我有一个包含聊天集合(用户名/消息)的 Mongo 数据库,但我的问题是
A)如何使用 axios 将插入的用户名和文本存储在集合中,以及
B) 一旦存储,我将如何允许父组件 (React) 立即将它们更新为 mongo 数据库中的空 div (chatArea),以便在页面刷新时,用户的旧聊天仍然存在?
我需要 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>
);
}
}
【问题讨论】: