javascript - 在切换时使用 CSSTransitionGroup react 动画

标签 javascript reactjs reactcsstransitiongroup

当单击按钮在状态之间切换时,我试图在组件进入和离开之间进行转换

我也试过把 <UserDetails /><UserEdit />作为单独的组件,但具有相同的结果,即不触发动画。

https://www.webpackbin.com/bins/-KjIPcMeQF3iriHRqTBW

Hello.js

import CSSTransitionGroup from 'react-transition-group/CSSTransitionGroup'
import './styles.css'
export default class Hello extends React.Component {
constructor() {
super()

this.state = { showEdit: false }
this.handleEdit = this.handleEdit.bind(this)
}

handleEdit() { this.setState({ showEdit: !this.state.showEdit }) } 

render() {

 const UserDetails = () => (
 <div className="componenta" key="1">UserDetails</div>
 )
 const UserEdit = () => (
 <div className="componentb" key="2">UserEdit</div>
 )

return(
<div >
    <CSSTransitionGroup 
      transitionName="example"
      transitionEnterTimeout={10}
      transitionLeaveTimeout={600}>
    {this.state.showEdit ? <UserDetails /> : <UserEdit />}
    </CSSTransitionGroup>
    <button onClick={this.handleEdit}>Toggle</button>
</div>
)
}
}

样式.css

.thing-enter {
 opacity: 0.01;
 transition: opacity 1s ease-in;
}

.thing-enter.thing-enter-active {
  opacity: 1;
}

 .thing-leave {
  opacity: 1;
  transition: opacity 1s ease-in;
 }

 .thing-leave.thing-leave-active {
  opacity: 0.01;
 }

最佳答案

你有你的 key属性设置为错误的项目 - <div>不是 CSSTransitionGroup 的直系后代(因为您通过将其定义为函数将其包装到组件中),因此它不知道添加或删除了哪些项目。您必须将 key 设置为 UserDetailsUserEdit , 所以 CSSTransitionGroup可以正确确定它的 child 的变化。

这是您的 render有效的方法:

render() {

    const UserDetails = () => (
      <div className="componenta">UserDetails</div>
    )
    const UserEdit = () => (
      <div className="componentb">UserEdit</div>
    )
    return(
    <div >
        <CSSTransitionGroup 
          transitionName="example"
          transitionEnterTimeout={10}
          transitionLeaveTimeout={600}>
        {this.state.showEdit ? <UserDetails key="1" /> : <UserEdit key="2" />}
        </CSSTransitionGroup>
        <button onClick={this.handleEdit}>Toggle</button>
    </div>
    )
  }

另一种方法是存储 UserDetailsUserEdit进入变量,然后渲染它们。这将允许您离开 key属性现在所在的位置,而不是移动它们。

关于javascript - 在切换时使用 CSSTransitionGroup react 动画,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43783778/

相关文章:

javascript - Laravel 将所有数据显示在一个干净的数组中

javascript - 如何使用 ng-model-option debounce 测试输入?

javascript - onClick 激活所有其他 onClick 事件

javascript - 如何在键更改的 React 中访问 JSON 对象

javascript - react : Rendering a list in reverse order

javascript - 在 extJS 中使用分页过滤商店

javascript - 如何在 React Context 中实现可观察的值监视

javascript - 没有使用 create-react-app 获得服务人员

reactjs - 如何更新 React Router 中的路由而不在单页应用程序中重新安装组件?

css - ReactJS CSSTransitionGroup 我怎样才能使我的过渡更平滑并从元素中删除过渡