3

我正在尝试在使用 React-spring 安装/卸载组件时创建动画:

    import { Transition, animated } from 'react-spring'
    ...

    export class CompName extends PureComponent<CompNamePropsType> {
      static defaultProps = {
        isExpanded: false,
      }

      render() {
        const {
          isExpanded,
          ...props
        } = this.props

    return (
      <section className={styles.block} {...props}>
        <Transition
          from={{ opacity: 0 }}
          enter={{ opacity: 1 }}
          leave={{ opacity: 0 }}>
        {isExpanded && (style => (
           <animated.div style={{ ...style, background: "orange" }}>
             <AnotherComp />
           </animated.div>
        ))}
       </Transition>
      </section>
    )
  }
}

但这只是行不通,我得到了一个错误children is not a function。我做错了什么,如何使用 react-spring 包装器在组件安装/卸载上创建动画?

4

1 回答 1

4

正确的方法是:

<Transition items={isExpanded} native from enter leave>
  {isExpanded => isExpanded && (props => <animated.div style={props} />)
</Transition>

中的项目可以是单个项目,例如您的情况,然后针对出现的项目进行处理。原因是转换将保留它,即使实际状态发生变化,它仍然可以安全地将元素转换为“旧”状态。

api在这里解释:react-spring.io/docs/props/transition

于 2018-11-09T18:53:24.330 回答