У меня есть следующий код, который не позволяет мне установить состояние после монтирования.
Вот код
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
напрямую или определите свойство класса state = {};
с желаемым состоянием в компоненте AlertService.