反应淡化元素

Glu*_*ear 13 javascript css fade reactjs

我有一个Basket组件需要BasketContents在单击时切换组件.这有效:

constructor() {
    super();
    this.state = {
      open: false
    }
    this.handleDropDown = this.handleDropDown.bind(this);
  }
  handleDropDown() {
    this.setState({ open: !this.state.open })
  }
    render() {
        return(
            <div className="basket">
                <button className="basketBtn" onClick={this.handleDropDown}>
                    Open
                </button>
              {
                this.state.open
                ?
                <BasketContents />
                : null
              }
            </div>
        )
    }
Run Code Online (Sandbox Code Playgroud)

它使用条件来显示BasketContents组件与否.我现在希望它淡入.我尝试添加一个ComponentDidMount钩子BasketContents来转换不透明度,但这不起作用.有一个简单的方法吗?

Gil*_*add 14

使用css类切换+不透明度转换的示例:https:
//jsfiddle.net/e7zwhcbt/2/

这是有趣的CSS:

.basket {
  transition: opacity 0.5s;
  opacity: 1;
}
.basket.hide {
  opacity: 0;
  pointer-events:none;
}
Run Code Online (Sandbox Code Playgroud)

和渲染功能:

render() {
    const classes = this.state.open ? 'basket' : 'basket hide'
    return(
      <div className="basket">
        <button className="basketBtn" onClick={this.handleDropDown}>
          {this.state.open ? 'Close' : 'Open'}
        </button>
        <BasketContents className={classes}/>
      </div>
    )
  }
Run Code Online (Sandbox Code Playgroud)

  • 你的小提琴似乎不再起作用了。可以在codesandbox中制作一个吗?例如 https://codesandbox.io/s/y2lrywpk21 (2认同)

Mic*_*mpl 5

我会像这样使用反应运动:

<Motion style={{currentOpacity: spring(this.state.open ? 1 : 0, { stiffness: 140, damping: 20 })}}>
    {({currentOpacity}) =>
        <div style={{opacity: currentOpacity}}>
            <BasketContents />
        </div>
    }
</Motion>
Run Code Online (Sandbox Code Playgroud)

我还没有测试过,但它应该可以工作。