v4 文档中提供的动画过渡示例对我来说似乎有点令人费解,因为它描述了相同组件的淡入和淡出以及调整背景颜色。
我正在尝试将此技术应用于一个更真实的示例,将一个组件淡出另一个组件,但是我无法让它正常工作(它似乎只是将第一个淡出,然后第二个弹出in,并且此转换仅以一种方式起作用(后退按钮不会导致转换)。
这是我的代码,它使用了示例中的精简版本MatchWithFade
:
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;
我意识到这个问题几乎是这个问题的重复,但是这个问题有一个公认的答案,但实际上并没有回答这个问题。