我有一个应用程序,它从外部设备读取值,然后将这些值写入数据库。 当我在数据库中写入此数据时,出现以下错误:
无法在已卸载的组件上执行React状态更新。这是 无操作,但表示您的应用程序内存泄漏。修理, 取消所有订阅和异步任务 componentWillUnmount方法。
关于此代码:
this.setState(state => ({
acc_dx,
array_acc_dx: [...state.array_acc_dx, [timeagm, ...acc_dx].join(":")]
}));
此代码是函数 setupNotifications1 的一部分,该函数又在componentDidMount()中调用的函数中被调用。
如何解决此警告?谢谢。
编辑1:
componentDidMount() {
this.deviceService1(this.device1);
}
在deviceService1()
内部,我打电话给this.deviceService2(this.device2)
,在内部,我打电话给setupNotifications1(this.device1)
和setupNotifications2(this.device2)
编辑2:
async setupNotifications1(device) {
var timeagm = 0;
var time = 0;
const service = this.serviceGeneral();
this.subscriptionMonitor1 = await device.monitorCharacteristicForService(
service,
this.AccGyrMg,
(error, characteristic) => {
if (error) {
this.error(error.message);
return;
}
const buf = Buffer.from(characteristic.value, "base64");
const [...acc_dx] = [2, 4, 6].map(index => buf.readInt16LE(index));
this.setState(state => ({
acc_dx,
array_acc_dx: [...state.array_acc_dx, [timeagm, ...acc_dx].join(":")]
}));
timeagm += 20;
然后我有一个停止按钮,用于删除this.subscriptionMonitor1并更改页面(我将值传递到了DB中已写入的另一页面中)