【发布时间】:2021-07-21 18:05:00
【问题描述】:
无论我尝试什么,它都会给我同样的错误; 要么是那个错误,要么是我的推送功能中断了
完全错误是:“警告:无法在尚未安装的组件上调用 setState。这是一个无操作,但它可能表明您的应用程序中存在错误。相反,直接分配给 this.state 或在 App 组件中定义具有所需状态的 state = {}; 类属性。”
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;
【问题讨论】:
-
用
this.setState({messages: mcopy})替换this.setState({mcopy});有效吗? -
我有一段时间没有接触过 React 中的类,但也许你不能像这样直接设置成员状态。或者您可以尝试将代码移动到 ComponentDidMount 函数中
-
@TechySharnav 不幸的是它没有
-
然后尝试将整个代码块,在构造函数之后和渲染之前移动到
ComponentDidMount() -
@TechySharnav 非常感谢您的帮助!有效! ♥
标签: reactjs state jsx setstate scaledrone