2016-12-20 17 views
12

Przykład przejścia do animacji provided in the v4 docs wydaje mi się nieco zawikłany, ponieważ przedstawia zanikanie tego samego komponentu i wyjścia oraz dostosowanie koloru tła.Przykład transformacji Router v4 Animowany przykład

Próbuję zastosować tę technikę do bardziej realnego przykładu zaniku jednego komponentu i drugiego, ale nie mogę go zmusić do poprawnego działania (wydaje się, że najpierw zanika pierwszy, drugi pojawia się, a przejście to działa tylko w jedną stronę (powrót przycisku powoduje brak przejścia)

Oto mój kod, który wykorzystuje uproszczoną wersję MatchWithFade od np.

import React from 'react'; 
import { TransitionMotion, spring } from 'react-motion' 
import { HashRouter, Match, Miss } from 'react-router'; 
import Home from './components/Home'; 
import Player from './components/Player'; 
import FormConfirmation from './components/FormConfirmation'; 

const App =() => (
    <HashRouter> 
    <div className="App"> 
     <MatchWithFade exactly pattern="/" component={Home} /> 

     <MatchWithFade pattern="/player/:playerId" component={Player} /> 

     <MatchWithFade pattern="/entered" component={FormConfirmation} /> 

     <Miss render={(props) => (
     <Home players={Players} prizes={Prizes} {...props} /> 
    )} /> 
    </div> 
    </HashRouter> 
); 

const MatchWithFade = ({ 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: spring(1) }, 
      data: props 
     } ] : []} 
     > 
     {interpolatedStyles => (
      <div> 
      {interpolatedStyles.map(config => (
       <div 
       key={config.key} 
       style={{...config.style}} 
       > 
       <Component {...config.data}/> 
       </div> 
      ))} 
      </div> 
     )} 
     </TransitionMotion> 
    )}/> 
) 
} 

export default App; 

i sobie sprawę, że to pytanie jest prawie duplikatem this one, jednak ma ono akceptowaną odpowiedź, która w rzeczywistości nie Odpowiedz na pytanie.

+0

Nie jestem szczególnie zaznajomiony z "reaktywnym ruchem", ale wygląda na to, że '' ma "willEnter' prop. Czy próbowałeś tego użyć? –

+0

Po prostu dzikie domysły: Czy masz ustawiony stały/absolutny zestaw pozycji? –

+0

Nie jestem zbyt obeznany z "reaktywnym ruchem", ale patrząc na twój kod, zastanawiam się, czy ma to związek z indeksem Z, który próbujesz przenieść. Twoje domyślne style dla komponentu 'TransitionMotion' nie mają indeksu Z, więc może to przeszkadzać w przejściu. Spróbuj zastąpić tę linię czymś w rodzaju: 'style: {zIndex: 2, nieprzezroczystość: wiosna (1)}' - Nie wiem, czy bit 'spring' jest konieczny? Ale możesz spróbować również owijać swoje z-indeksy. –

Odpowiedz

0

Przeniesiono do v4 docs do react-transition-group, więc możesz rozważyć zrobienie tego samego.

Jeśli chodzi o "zanikanie tego samego składnika na wejściu i wyjściu", to tak naprawdę nie jest to samo wystąpienie komponentu. Dwa wystąpienia istnieją jednocześnie i mogą zapewnić przenikanie. react-motion docs mówi "TransitionMotion zachował c wokół" i wyobrażam sobie, że react-transition-group jest taki sam.

+0

Dzięki @Jayen, to ma sens. Przedłożyłem to pytanie ponad rok temu, więc jest bardziej niż prawdopodobnie bardzo nieaktualne. Osobiście już nie szukam rozwiązania tego problemu, jednak pozostawiam to otwarte, ponieważ wciąż wydaje się, że otrzymuje przyzwoity ruch, co prowadzi mnie do przekonania, że ​​inni szukają również lepszego przykładu niż dostarcza dokumentacja. – dougmacklin