У меня есть строка ошибки, которую нужно смягчить при error = true
.
В render()
у меня есть:
render() {
const { errors } = this.props;
return (
<div id='messages'>
<div className={ errors ? 'show-messages' : 'hidden-messages' }>
<Container>{ this.renderMessage() }</Container>
</div>
</div>
)
}
Пользователь пытается, например, войти в систему, и если учетные данные неверны, сервер отвечает, что приводит к this.props.errors
, чтобы стать true
и show-messages
.
Тем не менее, я хочу, чтобы планка была ease-in
.
Это последняя версия CSS, которую я пробовал:
.hidden-messages {
visibility: hidden;
transition: width 2s, height 2s;
-webkit-transition: width 2s, height 4s;
transition-delay: 5s;
}
.show-messages {
visibility: visible;
background-color: #FFF;
transition: width 2s, height 2s;
-webkit-transition: width 2s, height 4s;
transition-delay: 5s;
}
Начинается только сtransition:
, но никуда не денется.Прочитайте где-нибудь, что вам нужно добавить transition-delay
, так что попробовал это, и это не сработало.
Я думаю, что проблема в том, что троичный в основном является переключателем включения / выключения и на самом деле не устанавливает каких-либо отношений между.hidden-messages
и .show-messages
или что-то в этом роде.Другими словами, как легко ... насколько он знает, что это было видно?Как мне это сделать?
РЕДАКТИРОВАТЬ: Я попробовал то, что Джейсон Макфарлейн предоставил в своем примере CodePen, и варианты его, и не смог воспроизвестирезультаты.
Кроме того, основываясь на приведенном ниже утверждении, я изменил несколько вещей:
Если вы хотите скрыть / показать состояние, то вы должны переключить скрытие или показкласс поверх состояния по умолчанию.
Пример: если ваше состояние по умолчанию должно отображать сообщения, вы всегда хотите, чтобы этот класс находился в этом div.
Поскольку мое состояние по умолчаниюэто hide-messages
, я закончил с ниже.Кроме того, я изменил троичный в его примере с show-messages.hide-messages
на show-messages hide-messages`.Я посмотрел на то, как DOM рендерился в примере CodePen, а последний - на то, как он меняет класс, поэтому я перешел на это.Все еще не повезло.
import React, { Component } from 'react';
import { connect } from 'react-redux';
import { clearMessages } from '../../actions/messages';
import {
Alert,
Container
} from 'reactstrap';
import styles from '../../../assets/scss/messages.scss';
class Messages extends Component {
constructor(props) {
super(props);
this.state = {
};
this.closeMessage = this.closeMessage.bind(this);
}
closeMessage() {
this.props.clearMessages();
}
renderMessage() {
const { errors } = this.props;
if (errors) {
return (
<Alert color='danger'>
<i onClick={ this.closeMessage } className='float-right fas fa-times'></i>
<span
dangerouslySetInnerHTML={{__html: errors.non_field_errors[0]}}>
</span>
</Alert>
);
}
}
render() {
const { errors } = this.props;
return (
<div id='messages'>
<div className={ errors ? 'hide-messages show-messages' : 'hide-messages' }>
<Container>{ this.renderMessage() }</Container>
</div>
</div>
)
}
}
function mapStateToProps(state) {
return {
errors: state.messages.errors
}
}
export default connect(mapStateToProps, { clearMessages })(Messages);
@import 'declarations';
#messages {
position: relative;
top: 105px;
.hide-messages {
visibility: hidden;
height: 0;
width: 0;
}
.hide-messages.show-messages {
visibility: visible;
background-color: $red;
transition: height 5s ease-in !important;
height: 100%;
width: 100%;
}
.alert-danger {
background-color: $red;
margin-bottom: 0;
border: none;
padding-left: 0;
padding-right: 0;
color: white;
i {
cursor: pointer;
}
}
}
Вот как это выглядит.Таким образом, по умолчанию нет красного баннера, и он должен ослабнуть.
![enter image description here](https://i.stack.imgur.com/LEdx5.png)