javascript - 无法读取用于发送短信的表单中未定义的属性“setState”
问题描述
我正在尝试构建一个反应公共聊天应用程序,在尝试发送消息时显示以下错误,所有其他功能都工作正常,但每当我尝试发送消息时它失败 我的聊天框代码就像这样,它有选项发送和阅读短信
我的聊天框代码是这样的,它可以选择发送和阅读短信
class Chat extends Component {
constructor(props){
super(props);
this.state={
user:auth().currentUser,
chats:[],
content:'',
readError: null,
loadingChats:false,
writeError:null
};
}
async componentDidMount(){
this.setState({readError:null})
try{
db.ref("chats").on("value",snapshot =>{
let chats=[];
snapshot.forEach((snap)=>{
chats.push(snap.val());
})
this.setState({chats})
})
}catch(error){
this.setState({readError:error.message})
}
}
handleChange(event) {
this.setState({ content: event.target.value });
}
async handleSubmit(event){
event.preventDefault()
this.setState({writeError:null});
try{
await db.ref("chats").push({
content:this.state.content,
timestamp:Date.now(),
uid:this.state.user.uid
});
this.setState({content:''})
}catch(error){
this.setState({writeError:error.message})
}
}
render() {
return (
<div>
<div className="chats">
{this.state.chats.map(chat => {
return <p key={chat.timestamp}>{chat.content}</p>
})}
</div>
<form onSubmit={this.handleSubmit}>
<input className="form-control" placeholder="Enter your Text" style={{marginBottom :0 + 'px',marginTop:32 +'rem',marginLeft:10 + 'px',marginRight:20 + "px" , width: 83 +'%',bottom:3,position:'absolute'}}
onChange={this.handleChange}
value={this.state.content}
/>
<button className=" btn btn-success" style={{marginTop:10 +'px',position:'absolute',right:3,bottom:3}}>
Send
</button>
</form>
<div>
Login in as: <strong>{this.state.user.email}</strong>
</div>
</div>
)
}
}
export default Chat;
解决方案
只需将你的方法绑定到你的类,所以基本上改变你的构造函数:
constructor(props){
super(props);
this.state={
user:auth().currentUser,
chats:[],
content:'',
readError: null,
loadingChats:false,
writeError:null
};
}
对此:
constructor(props){
super(props);
this.state={
user:auth().currentUser,
chats:[],
content:'',
readError: null,
loadingChats:false,
writeError:null
};
this.handleChange = this.handleChange.bind(this);
this.handleSubmit = this.handleSubmit.bind(this)
}
推荐阅读
- docker - Dockerfile 将一个 docker build 复制到另一个 docker 文件
- javascript - React Styled 组件条件接口基于作为 prop 传递的 `as` 值
- node.js - 子进程生成如何在窗口上工作而不在 ubuntu 上工作?
- c# - Linq 从列表列表中获取特定项目
- python - 如何将 Panda 中的数据按行插入 SQLite3 DB?
- sql - 如何仅在 order by 子句中使用计算列(条件时的情况)?
- c# - Kentico 如何在自定义表单控件中读取 POST 值
- oracle - 将我的 php 连接到我的 oracle 数据库的任何提示?(FreeBSD 12.1 AMD)
- arrays - 如何从以下 JSON 中删除“isCustom”键值对
- python - 角色未添加自动角色 | 不和谐.py