@SNina
Отчаянно пытаюсь научиться писать хорошие сайты

Как сделать два TransitionGroup в одном компоненте React?

Здравствуйте.
Изучаю React и пытаюсь разобраться с React Transition Group. Хочу сделать, чтобы анимировались одновременно количество заказанных бургеров и их сумма. Но одновременно не получается, - либо анимируется количество, либо только сумма. Подскажите, возможно ли это? Вот код:
import React from "react";
import Shipment from "./Shipment";
import { TransitionGroup, CSSTransition } from "react-transition-group";

class Order extends React.Component {

  renderOrder = (key) => {
    const burger = this.props.burgers[ key ];
    const count = this.props.order[ key ];
    const isAvailable = burger && burger.status === "available";
    const transitionsStyles = {
      classNames: "order",
      key,
      timeout: { enter: 500, exit: 500 }
    };

    if( isAvailable ) {
      return <CSSTransition
        { ...transitionsStyles }>
        <li key={ key }>
        <span>
          <TransitionGroup component="span" className="count">
            <CSSTransition classNames="count" key={ count } timeout={ { enter: 500, exit: 500 } }>
                <span>{ count } </span>
              </CSSTransition>
          </TransitionGroup>
            шт. { burger.name }
          <TransitionGroup component="span" className="price">
            <CSSTransition
              classNames="price"
              timeout={ { enter: 500, exit: 500 } }>
            <span> { count * burger.price } ₽</span>
            </CSSTransition>
    </TransitionGroup>
      <button className="cancellItem" onClick={ () => {
        this.props.deleteFromOrder( key );
      } }> &times;</button>;
    </span>
        </li>
      </CSSTransition>;

    }
    return <CSSTransition { ...transitionsStyles }      >
      <li className="unavailable" key={ key }>Извините, { burger ? burger.name : "бургер" } временно
        недоступен
      </li>
      ;
    </CSSTransition>;
  };

  render() {
    const orderIds = Object.keys( this.props.order );
    const total = orderIds.reduce( (prevTotal, key) => {
      const burger = this.props.burgers[ key ];
      const count = this.props.order[ key ];
      const isAvailable = burger && burger.status === "available";
      if( isAvailable ) {
        return prevTotal + burger.price * count;
      }
      return prevTotal;
    }, 0 );

    return (
      <div>
        <h2>Ваш заказ</h2>
        <TransitionGroup component="ul" className="order">
          { orderIds.map( this.renderOrder ) }
        </TransitionGroup>
        { total > 0 ? ( <Shipment total={ total }/> ) : (
          <div className="nothingSelected">Выберите блюдо и нажмите на кнопку 'Заказать'</div> ) }
      </div>
    );
  }
}

export default Order;


Ссылка на gitHub
  • Вопрос задан
  • 82 просмотра
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы
28 нояб. 2024, в 21:25
5000 руб./за проект
28 нояб. 2024, в 18:46
3000 руб./за проект
28 нояб. 2024, в 17:46
10000 руб./за проект