Reactjs 反应-can';t对尚未安装的组件调用setState(scaledrone应用程序)

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”导入输入; 类应用程序扩展组件{ 构造函数(){

无论我怎么尝试,它都会给我同样的错误; 要么是错误,要么我的推送功能中断

完整错误是:“警告:无法对尚未装入的组件调用setState。这是一个no-op,但可能表明应用程序中存在错误。相反,请直接将
分配给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;