gpt4 book ai didi

javascript - 无法在react组件中使用setState

转载 作者:行者123 更新时间:2023-12-03 01:39:50 25 4
gpt4 key购买 nike

我有以下代码,不允许我在安装后设置状态。

这是代码

    import React, { Component } from 'react';
import Messages from '../locale/en/Messages';
import '../styles/base.css';

class AlertService extends Component {
state = {
message: '',
classType: 'alert-info',
isMessageSet: false
}

Messages = new Messages();

componentDidMount = () => {
console.log('This has mounted'); // This is working
}
componentWillUnmount = () => {
console.log('Is this getting unounted ?'); // This is working, the component is not getting unmounted
}
setAlert = (key, type, isMessage, readMore) => {
let message = isMessage ? key : this.Messages[key];
let classType = 'alert-info';
if (type === 0) {
classType = 'alert-danger';
} else if (type === 1) {
classType = 'alert-success';
}
this.openMessage(message,classType);


}
openMessage = (message,classType) =>{
this.setState({
message: message,
classType: classType,
isMessageSet: true
});
}
closeMessage = () => {
this.setState({
message: '',
classType: 'info',
isMessageSet: false
});
}
render() {
let classes = this.state.classType + ' ' + 'alertBox';
return (this.state.isMessageSet ?

<div className={classes}>
<div className="col-md-11"> {this.state.message} </div>
<div className="col-md-1 closeAlert" onClick={this.closeMessage}> x </div>


</div>

: null
)
}
}
export default AlertService;

当我尝试从此组件外部调用函数 setAlert 时,出现以下错误。但是,如果我将 isMessageSet 属性设置为 true,然后单击 X 并调用 closeAlert 方法,它就可以正常工作。

componentDidMount 表示组件正在安装,而 componentWillUnmount 永远不会被执行,我不确定这里出了什么问题

错误信息 无法对尚未安装的组件调用 setState。这是一个空操作,但它可能表明您的应用程序中存在错误。相反,请直接分配给 this.state 或在 AlertService 组件中定义具有所需状态的 state = {}; 类属性。

最佳答案

setState不应从组件外部调用。如果你想从外部改变状态,请使用 props。

正如错误消息所示,该组件未安装。您可以通过添加 <AlertService /> 来安装它到布局。

关于javascript - 无法在react组件中使用setState,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50898357/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com