ReactJS:淡入div并根据状态淡出div

Dal*_*ron 5 reactjs

所以,我试图根据用户点击的按钮淡入并淡出一组输入.我尝试使用jQuery,但是,div正在逐渐消失并以相同的速度逐渐消失......

我正在使用es6类并做出反应.

我想要的是用户按下按钮和输入淡入.另一个按钮,输入fadeOut.我不介意使用jQuery,但我想了解如何做反应.

renderInputs() {
  if (this.state.addType === "image") {
    return (
      <div className="addContainer">
        <input type="text" className="form-control" />
      </div>
    )
  } else {
    return (
     other inputs
    )
  }
}

render() {
  return (
    <CSSTransitionGroup
      transitionName="fadeInput"
      transitionEnterTimeout={500}
      transitionLeaveTimeout={300}>

      {this.renderInputs()} // this doesn't work but I want this content to be conditional.

    </CSSTransitionGroup>
  )
}

// SCSS
.fadeInput-enter {
  opacity: 0.01;
}

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

.fadeInput-leave {
  opacity: 1;
}

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

mri*_*ech 14

只需使用条件class和CSS.

state变量之类的visible.

this.state = {
   visible:false
}
Run Code Online (Sandbox Code Playgroud)

而对于其他输入做类似的事情

<input className={this.state.visible?'fadeIn':'fadeOut'} />
Run Code Online (Sandbox Code Playgroud)

所以,这取决于state.visible输入都会有classfadeInfadeOut.

然后只使用简单的CSS

.fadeOut{
     opacity:0;
     width:0;
     height:0;
     transition: width 0.5s 0.5s, height 0.5s 0.5s, opacity 0.5s;

}
.fadeIn{
     opacity:1;
     width:100px;
     height:100px;
     transition: width 0.5s, height 0.5s, opacity 0.5s 0.5s;

}
Run Code Online (Sandbox Code Playgroud)

所以每次改变和state.visible发生class变化transition.transitionCSS中的属性基本上是用逗号分隔的所有过渡.在过渡的第一个参数是要修改的属性(比如height,width等),二是transition-duration这是采取的过渡和第三(可选)的时间transition-delay即过渡已经开始后多少时间做了具体的过渡财产发生.所以当this.state.visible成为附加到对象true.fadeIn类时.在transition具有heightwidth服用,每次0.5秒,这样将需要0.5秒成长,它完成后opacity过渡(其中有0.5秒的延迟)将触发,并采取进一步的0.5秒获得opacity1.对于它的反面上的隐藏.

记得让OnClick按钮上的事件处理更改this.state.visible.


Tal*_*sar 6

您也可以使用 CSSTransitionGroup 实现此目的

const Example = ({items, removeItemHandler}) => {
  return (
    <div>
      <CSSTransitionGroup transitionName="fadeInput"
  transitionEnterTimeout={500}
  transitionLeaveTimeout={300}>
        {this.renderInputs().map(function(input) {
          return (
            <div key={input.id} className="my-item" onClick={removeItemHandler}>
              {item.name}
            </div>
          );
        })}
      </ReactCSSTransitionGroup>
    </div>
  );
};
Run Code Online (Sandbox Code Playgroud)

使用 React 时,有时您希望在组件安装后直接设置动画,或者在卸载之前直接设置动画。就像在您的示例中一样,假设您映射了一组对象并在您的应用程序中呈现了一个列表。现在,假设您要为已添加到阵列的新项目或从阵列中删除的淡出项目添加动画。CSSTransitionGroup 组件接受 transitionEnterTimeout 和 transitionLeaveTimeout 作为道具。这些值代表的是进入和离开转换的持续时间(以毫秒为单位)。