【发布时间】:2018-11-26 15:27:09
【问题描述】:
我有以下代码在安装后不允许我设置状态。
这里是代码
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 = {}; 类属性。
【问题讨论】:
-
“在这个组件之外”是什么意思?
-
当有消息要显示时,我从另一个组件调用这个组件的setAlert函数,通过实例化AlertService类。
-
哦,有这样的用例。好吧,别理我的问题。
-
你在哪里叫它组件之外???
标签: javascript reactjs react-native components setstate