CSST-переход, реагирующий-переходной группы, условный с нулем - PullRequest
1 голос
/ 06 марта 2019

Попытка заставить работать простой постепенный переход / исчезновение.

Я пытался переместить <CSSTransition> в разные области безрезультатно.Я успешно использую это в другом компоненте, который отображает дочерние элементы, но не могу понять, почему это не будет работать в этом случае, так как я отображаю его вместе с дочерним компонентом, если дочерний элемент вообще возвращается.

дочерний компонент

const Error = (props) => {
  return (
    <CSSTransition timeout={400} classNames={errorTransition}>
      <span> {props.errorString} </span>
    </CSSTransition>
  )
}

родительский компонент

import React, { Component } from 'react';
import { connect } from 'react-redux';
import { CSSTransition } from 'react-transition-group';

import type { InfoState } from './state';
import { closeError } from './actions';

const mapStateToProps = (state: {info: InfoState}) => ({
  info: state.info.data.info,
  infoError: state.info.infoError,
});

const mapDispatchToProps = dispatch => ({
  closeError: () => dispatch(closeError()),
});

class Parent extends Component<Props, State> {
  state = { info: this.props.info };

  handleChange = (e) => {
    this.setState({ info: e.target.value });
    this.props.closeError();
  }

  render() {
    if (this.props.info === null) {
      return (
        <div className="info-wrapper">
          <input
            type="text"
            value={this.state.info ? this.state.info : '' }
            onChange={this.handleChange}
          />
        </div>
        <div className="info-error">
          { this.props.infoError !== ''
            ? <Error 
                key={this.state.info} 
                errorString={this.props.infoError} 
              />
            : null
           }
        </div>
      )
    }
    return ( <div> things </div> )
  }
}

CSS

.errorTransition-enter {
  opacity: 0.01;
}
.errorTransition-enter-active {
  opacity: 1;
  transition: all 400ms ease-out;
}
.errorTransition-exit {
  opacity: 1;
}
.errorTransition-exit-active {
  opacity: 0.01;
  transition: all 400ms ease-out;
}

1 Ответ

1 голос
/ 07 марта 2019

У меня была похожая проблема с условным удалением элемента, завернутого в <CSSTransition>.Чтобы решить эту проблему, я обернул элемент <CSSTransition> элементом <TransitionGroup> и использовал его childFactory prop.childFactory опора может использоваться следующим образом:

  <TransitionGroup
     childFactory={child => React.cloneElement(child)}
  >
    <CSSTransition timeout={400} classNames={errorTransition}>
      <span> {props.errorString} </span>
    </CSSTransition>
  </TransitionGroup>
...