React Router v4 Совпадение переходов с использованием React Motion

Я люблю RR4 и RM, уже есть отличные примеры для React Router V4 ( https://github.com/ReactTraining/react-router/tree/v4/website/examples), но я пытаюсь понять, как я могу использовать новый API V4 для перехода между различными совпадениями в моем маршрутизаторе с помощью React Motion, постепенно исчезая между моими "страницами".

Я пытался понять, как пример Transition работает с MatchWithFade, но мне не хватает, как это сделать и применить его к нескольким совпадениям, представляющим мою структуру страницы.

В качестве примера: с учетом двух маршрутов, установленных в моем маршрутизаторе, как можно настроить монтирование и размонтирование с помощью response-motion с помощью TransitionMotion?

<Router>
  <div>
    <Match pattern="/products" component={Products} />
    <Match pattern="/accessories" component={Accessories} />
  </div>
</Router>

Любая помощь будет принята с благодарностью.

1 ответ

Решение

Из приведенного примера мы можем упростить. Сначала мы создаем компонент-обертку, который заменит <Match/> пометьте и оберните его компонент:

import React from 'react'
import { Match } from 'react-router'
import { TransitionMotion, spring } from 'react-motion'

const styles = {}

styles.fill = {
  position: 'absolute',
  left: 0,
  right: 0,
  top: 0,
  bottom: 0
}

const MatchTransition = ({ component: Component, ...rest }) => {
  const willLeave = () => ({ zIndex: 1, opacity: spring(0) })

  return (
    <Match {...rest} children={({ matched, ...props }) => (
      <TransitionMotion
        willLeave={willLeave}
        styles={matched ? [ {
          key: props.location.pathname,
          style: { opacity: 1 },
          data: props
        } ] : []}
      >
        {interpolatedStyles => (
          <div>
            {interpolatedStyles.map(config => (
              <div
                key={config.key}
                style={{ ...styles.fill, ...config.style }}
              >
                <Component {...config.data} />
              </div>
            ))}
          </div>
        )}
      </TransitionMotion>
    )} />
  )
}

export default MatchTransition

Тогда мы используем это так:

<MatchTransition pattern='/here' component={About} />
<MatchTransition pattern='/there' component={Home} />
Другие вопросы по тегам