transitionEnterTimeout/transitionLeaveTimeout在React中实际做了什么?

Chr*_*ris 8 javascript reactjs

在React中为元素设置动画时,我们可以使用以下代码段:

      <div>
        <button onClick={this.handleAdd}>Add Item</button>
        <ReactCSSTransitionGroup transitionName="example" transitionEnterTimeout={500} transitionLeaveTimeout={300}>
          {items}
        </ReactCSSTransitionGroup>
      </div>
Run Code Online (Sandbox Code Playgroud)

随着赞美css动画.

我已经阅读了文档(在这里找到:https://facebook.github.io/react/docs/animation.html)但我不是100%确定两个超时属性实际上做了什么?如果动画没有完成,我会冒险猜测它们是一个后备吗?

值是否与css输入/输出持续时间值匹配,还是应该大于动画值?

.example-enter {
  opacity: 0.01;
}

.example-enter.example-enter-active {
  opacity: 1;
  transition: opacity 500ms ease-in;
}

.example-leave {
  opacity: 1;
}

.example-leave.example-leave-active {
  opacity: 0.01;
  transition: opacity 300ms ease-in;
}
Run Code Online (Sandbox Code Playgroud)

Bil*_*ill 9

它们表示关联的CSS转换需要多长时间才能完成.您应该将这些值设置为您在过渡属性的CSS类中使用的相同值.

然后,ReactCSSTransitionGroup使用它来确定何时应该考虑添加和删除的元素,以便它可以采取正确的操作.它曾经通过监听回调来做到这一点,然而,事实证明这实际上是不可靠的,因为有很多实例从未调用过回调.例如,这将导致在转换结束后永远不会删除元素.

  • 就像后续一样,目前,如果正在应用的类具有与之关联的转换或动画,则`*Timeout`道具实际上不会做任何事情.您可以将值设置为您想要的任何值,并且`ReactCSSTransitionGroup`只是忽略它,而倾向于监听浏览器发出的`animationEnd`或`transitionEnd`事件.这些值唯一能做的事情就是当类没有过渡或动画时. (4认同)