Reactjs 反应-can';t对尚未安装的组件调用setState(scaledrone应用程序)
无论我怎么尝试,它都会给我同样的错误; 要么是错误,要么我的推送功能中断 完整错误是:“警告:无法对尚未装入的组件调用setState。这是一个no-op,但可能表明应用程序中存在错误。相反,请直接将Reactjs 反应-can';t对尚未安装的组件调用setState(scaledrone应用程序),reactjs,state,jsx,setstate,scaledrone,Reactjs,State,Jsx,Setstate,Scaledrone,无论我怎么尝试,它都会给我同样的错误; 要么是错误,要么我的推送功能中断 完整错误是:“警告:无法对尚未装入的组件调用setState。这是一个no-op,但可能表明应用程序中存在错误。相反,请直接将分配给This.state,或者在应用程序组件中定义一个具有所需状态的state={};类属性。” import React,{Component}来自'React'; 导入“/App.css”; 从“/Messages”导入消息; 从“/Input”导入输入; 类应用程序扩展组件{ 构造函数(){
分配给This.state
,或者在应用程序组件中定义一个具有所需状态的state={};
类属性。”
import React,{Component}来自'React';
导入“/App.css”;
从“/Messages”导入消息;
从“/Input”导入输入;
类应用程序扩展组件{
构造函数(){
超级();
此.state={
信息:[],
成员:{
用户名:randomName(),
颜色:randomColor(),
},
}
this.drone=new window.Scaledrone(“Qk3ma3HbEXr6Lwh7”{
数据:this.state.member
});
this.drone.on('open',error=>{
如果(错误){
返回控制台。错误(error);
}
const member={…this.state.member};
member.id=this.drone.clientId;
this.state.member={…member};
});
const room=this.drone.subscribe(“可观察房间”);
room.on('数据',(数据,成员)=>{
const mcopy=this.state.messages;
push({member,text:data});
this.setState({mcopy});
});
}
render(){
返回(
聊天室
);
}
onSendMessage=(消息)=>{
这个。无人机。发布({
房间:“可观察的房间”,
消息
});
}
}
导出默认应用程序;
您不应该在构造函数()中调用setState(),从技术上讲,setState意味着使用新值更新现有状态。您应该将状态操纵移动到ComponentDidMount生命周期
另外,不要改变状态,而是创建一个克隆,然后进行更改。替换
this.setState({mcopy})代码>使用this.setState({messages:mcopy})
工作吗?我已经有一段时间没有在React中接触类了,但是您可能无法像那样直接设置成员国。或者您可以尝试将代码移动到ComponentDidMount中function@TechySharnav不幸的是,它没有尝试在构造函数之后和渲染之前移动整个代码块到ComponentDidMount()
@TechySharnav非常感谢您的帮助!成功了!♥感谢Qamar、TechySharnav和NanoBit——这是我需要的解决方案。很高兴你解决了:)
import React, { Component } from 'react';
import './App.css';
import Messages from "./Messages";
import Input from "./Input";
class App extends Component {
constructor() {
super();
this.state = {
messages:[],
member: {
username: randomName(),
color: randomColor(),
},
}
this.drone = new window.Scaledrone("Qk3ma3HbEXr6Lwh7", {
data: this.state.member
});
this.drone.on('open', error => {
if (error) {
return console.error(error);
}
const member = {...this.state.member};
member.id = this.drone.clientId;
this.state.member = {...member};
});
const room = this.drone.subscribe("observable-room");
room.on('data', (data, member) => {
const mcopy = this.state.messages;
mcopy.push({member, text: data});
this.setState({mcopy});
});
}
render() {
return (
<div className="App">
<div className="App-header">
<h1>Chat Aplikacija</h1>
</div>
<Messages
messages={this.state.messages}
currentMember={this.state.member}
/>
<Input
onSendMessage={this.onSendMessage}
/>
</div>
);
}
onSendMessage = (message) => {
this.drone.publish({
room: "observable-room",
message
});
}
}
export default App;