我很喜欢RR4和RM,已经有很好的React Router V4示例(https://github.com/ReactTraining/react-router/tree/v4/website/examples),但我很难理解如何使用新的V4 API在我的路由器中的不同匹配之间进行转换反应动作,在我的'页面'之间淡入淡出。
我试图理解Transition示例如何与MatchWithFade一起工作,但我错过了如何将其应用于表示我的页面结构的多个匹配项。
举个例子:在我的路由器中设置了两个路由,如何通过reactMotion的react-motion处理挂载和卸载?
<Router>
<div>
<Match pattern="/products" component={Products} />
<Match pattern="/accessories" component={Accessories} />
</div>
</Router>
非常感谢任何帮助。
答案 0 :(得分:0)
从链接的例子我们可以简化。首先,我们创建一个包装器组件,它将替换<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} />