在状态/道具上重新启动动画在react-motion中更改

san*_*hit 3 javascript reactjs react-motion

我试图用动画从反应运动面包屑x: -20x: 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)

san*_*hit 8

通过它react-motion,我通过设置一个独特的key道具找到了一个修复Motion,StaggeredMotion使它重新渲染状态变化.

请参阅官方报告中的此问题.

对于我的情况,我通过将keyprop 设置为面包屑列表的长度来解决它.

<StaggeredMotion
      key={this.props.crumbs.length}
      ...>
    ...
</StaggeredMotion>
Run Code Online (Sandbox Code Playgroud)