Рубрики
Без рубрики

Добавление анимации в ваше приложение React с группой React Regiving

Узнайте, как добавить функциональные анимации пользовательских интерфейсов в ваше приложение React с библиотекой React Regiving Group. Теги от реагирования, анимации, JavaScript.

Добавление Функциональные анимации Ваше приложение может быть отличным способом улучшить свой пользовательский опыт. При правильном использовании анимация может помочь увлечь внимание пользователя к определенным частям вашего приложения, помочь восстановить отношения в интерфейсе и предотвращать Изменить слепоту Отказ

Пример анимации, который может улучшить опыт пользователя, исчезает в элементе, когда он добавлен в список. Шаги для этой анимации могут выглядеть что-то подобное:

  1. Сделать новый предмет.
  2. Подготовьте товар для анимации. В этом случае установите его непрозрачность на 0 Отказ
  3. Переход на непрозрачность элемента от 0 к 1 в течение периода времени.

А для удаления товара:

  1. Отметьте предмет для удаления.
  2. Переход на непрозрачность элемента от 1 к 0 в течение периода времени.
  3. Удалите элемент после завершения перехода.

Управление всеми этими состояниями может быть громоздким, поэтому давайте попробуем найти библиотеку, которая может справиться с ними для нас. Введите Группа React Переход Отказ

Group React Transition содержит набор компонентов, которые управляют состоянием монтажа компонентов и монтажным монтажом со временем. Он не диктует, как наши компоненты ведут себя как они устанавливаются или размонтированы, эта часть зависит от нас. Этот минимализм дает нам гибкость, чтобы определить нашу анимацию, однако мы хотим.

В этой статье мы собираемся добавить переходную анимацию в доску карты, анимационные карты, поскольку они добавляются и удалены с доски.

Вот готовый результат:

Вы можете увидеть живую демонстрацию анимации здесь Отказ

Предварительные условия

Вы должны иметь основное понимание Реагировать и CSS переходы Отказ

Используемые пакеты

  1. Реагировать V15.6.1
  2. React-DOM V15.6.1
  3. React-Praction-Group V2.0.2

Установка

Прежде чем мы сможем добавить анимацию в наше приложение, нам нужно приложение для анимации!

Приложение, которое мы собираемся создавать, довольно просто, так как он состоит только из 3 компонентов:

  1. <Карта/>
    • Компонент, который будет анимирован в и отсутствие существования.
    • Оказывает список <Карта/> Предметы.
  2. <Приложение/>
    • Корень нашего приложения. Управляет состоянием карт, которые будут оказаны в и содержит кнопки для добавления и удаления карт.

Вот исходный код для этих компонентов:

<Карта/>

function Card ({children, onRemove}) {
  return (
    
{children}
) }

function Board ({children}) {
  return (
    
    {children}
) }

<Приложение/>

class Application extends React.Component {
  constructor (props) {
    super(props)

    this.state = {
      cards: []
    }

    this.addCard = this.addCard.bind(this)
    this.removeCard = this.removeCard.bind(this)
    this.removeLastCard = this.removeLastCard.bind(this)
  }

  render () {
    const {cards} = this.state

    return (
      

React Transition Demo

{ cards.map(card => { return (
  • { this.removeCard(card.id) }}>{card.content}
  • ) }) }
    ) } addCard () { const {cards} = this.state const id = cards.length + 1 const newCard = { id, content: `Card ${id}` } this.setState({ cards: cards.concat([newCard]) }) } removeCard (id) { const {cards} = this.state this.setState({ cards: cards.filter(card => card.id !== id) }) } removeLastCard () { const {cards} = this.state this.setState({ cards: cards.slice(0, -1) }) } }

    Вы можете получить стили для этих компонентов от github Отказ

    Если вы запустите это приложение AS-IS, вы сможете добавить и удалять карты (захватывающие вещи!). Но то, как карты только что высыхают и вне существования, не визуально привлекательны. Давайте исправить это, добавив анимацию перехода.

    Добавление анимации

    Мы хотим сделать добавление и удаление карт чувствовать себя бесшовные. Мы можем сделать исчезающие и скользящие карты, поскольку они добавляются и удалены, вроде так:

    Но прежде чем мы сможем анимировать переходы карты, нам нужен способ отслеживать состояние карт, поскольку они добавляются и удалены из наших и запустите соответствующую анимацию как карты ввода и выхода.

    Карта ввода анимации должна работать, как только карта добавляется в список. Анимация выхода из карты должна работать, когда карта удаляется из списка, но карта должна оставаться в доме, пока анимация не закончится. Как только анимация завершится, карта должна быть удалена из дома.

    Это звучит как много работы. Так что вместо того, чтобы реализовать эту функцию себя, давайте использовать <Переходная группа/> Компонент, предоставляемый группой RACT RESSIVE.

    Использование <Переходная группа/>

    <Переходная группа/> должны быть обернуты вокруг списка элементов, которые должны быть анимированы. Итак, давайте заменим Компонент в методе рендера <Приложение/> с <Переходная группа/> Отказ

    По умолчанию <Переходная группа/> Обернут свой список элементов дочерних элементов в , но мы можем иметь это обернуть наши карты в вместо этого, установив Компонент проп

    import TransitionGroup from 'react-transition-group/TransitionGroup'
    
    // ...
    
    
      {
        cards.map(card => {
          return (
        
  • { this.removeCard(card.id) }}>{card.content}
  • ) }) }
    // ...

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

    Использование <переход/>

    <Переход/> Компонент из группы React Praction позволяет нам определить, как компонент должен вести себя, когда он отображается или собирается удалить из DOM.

    Состояние добавления или удаления компонента обрабатывается через в пропры Этот опор есть логический Значение, которое указывает на то, что компонент должен быть показан или нет. Значение правда означает, что компонент должен быть показан, а ложь означает, что компонент должен быть скрыт.

    Значение в предоставляется <Переходная группа/> , что установит этот опоры на правда Когда компонент добавляется и на ложь когда компонент удален.

    Изменение стоимости в опора будет вызвать серию изменений статуса в течение определенного периода времени. Эти изменения состояния позволяют нам анимировать компонент, применяя разные стили к нему в качестве статуса изменений перехода.

    Мы собираемся создать Компонент, который можно использовать для применения анимации перехода к компоненту, так как он установлен и размонтированный.

    Вот код для этого компонента:

    import Transition from 'react-transition-group/Transition'
    
    //  is a component that wraps children in 
    // a  component. 
    // 'children' is the element to be animated.
    // 'duration' is the duration of the animation in milliseconds.
    // The `in` prop will be provided by . 
    function FadeAndSlideTransition ({children, duration, in: inProp}) {
      // Styles to set on children which are necessary in order
      // for the animation to work.
      const defaultStyle = {
        // Transition "opacity" and "transform" CSS properties.
        // Set duration of the transition to the duration of the animation.
        transition: `${duration}ms ease-in`,
        transitionProperty: 'opacity, transform'
      }
    
      // Styles that will be applied to children as the status
      // of the transition changes. Each key of the
      // 'transitionStyles' object matches the name of a 
      // 'status' provided by . 
      const transitionStyles = {
        // Start with component invisible and shifted up by 10%
        entering: {
          opacity: 0,
          transform: 'translateY(-10%)'
        },
        // Transition to component being visible and having its position reset. 
        entered: {
          opacity: 1,
          transform: 'translateY(0)'
        },
        // Fade element out and slide it back up on exit.
        exiting: {
          opacity: 0,
          transform: 'translateY(-10%)'
        }
      }
    
      // Wrap child node in .
      return (
        
          {
            // Children is a function that receives the current
            // status of the animation.
            (status) => {
              // Don't render anything if component has 'exited'.
              if (status === 'exited') {
                return null
              }
    
              // Apply different styles to children based
              // on the current value of 'status'. 
              const currentStyles = transitionStyles[status]
              return React.cloneElement(children, {
                style: Object.assign({}, defaultStyle, currentStyles)
              })
            }
          }
        
      )
    }
    

    Мы можем применить нашу исчезновение и переход сдвига на наши карты, упаковывая каждый <Карта/> В оформлении компонент:

    // render method of 
    
      {
        cards.map(card => {
          return (
            
              
  • { this.removeCard(card.id) }}>{card.content}
  • ) }) }

    Если вы перегружете приложение сейчас, вы увидите, что приятная анимация будет применяться к картам, поскольку они добавляются и удалены с доски.

    Вот разрыв того, как это все работает.

    Всякий раз, когда добавлена карта:

    1. <Переходная группа/> сделает новый Компонент, который делает <Карта/> содержащийся в пределах <Переход/> Отказ

    2. Каждый <Карта/> сразу есть свои Переход Стили набор, что вызовет непрозрачность и трансформировать стили должны быть анимированы всякий раз, когда они меняются.

    3. в Подп установлен на правда , что вызывает дети Функция <Переход/> компонент, который будет называться со статусом входящий Отказ Стили из Переходностью. Вентиляция затем применяются к <Карта/> Отказ

    4. Потому что время ожидания анимации ввода устанавливается на 0 , дети будет вызван снова сразу со статусом вошел Отказ Это обновляет <Карта/> ‘s непрозрачность и трансформировать Стили, которые вызывают переход CSS.

    Всякий раз, когда карта удалена:

    1. <Переходная группа/> установит в опора Компонент, который карта отображается в ложь Отказ
    2. дети Функция <Переход/> Компонент будет вызван с статусом Выход Отказ Выход стили применяются к <Карта/> который заставляет его исчезать и скользить вверх.
    3. Однажды Продолжительность анимации истек, дети вызывается со статусом вышел Отказ Мы возвращаемся null Для того, чтобы удалить <Карта/> от дома.

    Применение встроенных стилей – это всего лишь один из способов создания анимации. Вы также можете использовать Статус Переменная от <Переход/> дети Функция для применения класса CSS:

    
        {
          (status) => {
            // Don't render anything if component has "exited".
            if (status === 'exited') {
              return null
            }
    
            return 
          }
       }
    
    

    Затем вы создадите класс CSS для каждого статуса:

    .fade {
      transition: ease-in 0.15s;
      transition-property: opacity, transform;
    }
    
    .fade-entering {
      opacity: 0
      transform: translateY(-10%);
    }
    

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

    Если вы хотите увидеть рабочий пример с некоторым кодом, вы можете проверить исходный код для этого примера на Github Отказ

    И если вы хотите узнать больше о Group Reg Praction, проверьте Github repo и Документация Отказ

    Оригинал: “https://dev.to/underdogio/adding-animations-to-your-react-app-with-react-transition-group”