san*_*hit 3 javascript reactjs react-motion
我试图用动画从反应运动面包屑x: -20来x: 0.
Folder > SubFolder > Child
问题是,面包屑在第一个渲染时完美地制作动画.随后当props甚至state更改时,动画不会更新.这似乎是一个已知的错误.
我的问题是,如何在状态/道具变化中"重新启动"动画?
const getDefaultStyles = crumbs => {
const defaultStyles = crumbs.map(() => ({x: -20}))
console.log(defaultStyles)
return defaultStyles
}
const getStyles = previousInterpolatedStyles => {
return previousInterpolatedStyles.map((_, i) => {
return i === 0 ? {x: spring(0)} : {x: spring(previousInterpolatedStyles[i-1].x)}
})
}
const Breadcrumb = ({ crumbs }) => (
<div className='breadcrumb-container'>
<StaggeredMotion
defaultStyles={getDefaultStyles(crumbs)}
styles={getStyles}>
{
interpolatedStyles =>
<div className='breadcrumb-list'>
{
interpolatedStyles.map(({x}, i) =>
<div className='breadcrumb' key={i} style={{
WebkitTransform: `translate3d(${x}px, 0, 0)`,
transform: `translate3d(${x}px, 0, 0)`
}}>
<a href='#'>Title</a>
</div>
)
}
</div>
}
</StaggeredMotion>
</div>
)
Run Code Online (Sandbox Code Playgroud)
通过它react-motion,我通过设置一个独特的key道具找到了一个修复Motion,StaggeredMotion使它重新渲染状态变化.
请参阅官方报告中的此问题.
对于我的情况,我通过将keyprop 设置为面包屑列表的长度来解决它.
<StaggeredMotion
key={this.props.crumbs.length}
...>
...
</StaggeredMotion>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
952 次 |
| 最近记录: |