【问题标题】:Why React-Semantic-UI Transition not animating the Component?为什么 React-Semantic-UI 转换不为组件设置动画?
【发布时间】:2019-07-30 11:33:37
【问题描述】:

我有一个组件,它是一个Modal 警报。对于 Modal 动画,我使用了来自 semantic-ui-react 的 Transition。但是只有少数动画(pulsebounceflash)可以工作,而且只有在安装组件时才能工作,而在我关闭Modal 时不能工作。 duration 属性也不起作用。

class Alert extends React.Component {
  state = {
    open: true
  };

  close = () => {
    this.setState({
      open: false
    });
  };

  render() {
    const { open } = this.state;
    return (
      <Transition animation="fade" duration={1000} visible={open}>
        <Modal
          size="mini"
          closeOnDimmerClick={false}
          closeOnEscape={false}
          open={this.state.open}
          onClose={this.close}>

          <Modal.Content>
            <p>
              Hello user
            </p>
          </Modal.Content>
          <Modal.Actions>
            <Button color="blue" onClick={this.close}>
              Ok
            </Button>
          </Modal.Actions>
        </Modal>
      </Transition>
    );
  }
}

为什么会有这种奇怪的行为?我做错了什么?

【问题讨论】:

    标签: reactjs semantic-ui-react react-transition-group


    【解决方案1】:

    ModalTransition 可以动画之前卸载,一种方法是让Transition 卸载Modal:

    class Alert extends React.Component {
      state = {
        open: true
      };
    
      close = () => {
        this.setState({
          open: false
        });
      };
    
      render() {
        const { open } = this.state;
        return (
          <Transition
            animation="fade"
            duration={1000}
            unmountOnHide={true}
            visible={open}
          >
            <Modal
              size="mini"
              closeOnDimmerClick={false}
              closeOnEscape={false}
              open={true}
              onClose={this.close}
            >
              <Modal.Content>
                <p>Hello user</p>
              </Modal.Content>
              <Modal.Actions>
                <Button color="blue" onClick={this.close}>
                  Ok
                </Button>
              </Modal.Actions>
            </Modal>
          </Transition>
        );
      }
    }
    

    希望对你有帮助!

    【讨论】:

    • 是的,它奏效了。但是,组件永远不会被卸载。我输入了componentWillUnmount,它永远不会被调用。你能试试这个吗?
    • Alert 组件不会卸载,Modal 将被卸载,Transition 组件应该被安装,以便它能够应用其子级的过渡。您想做什么,一旦模态关闭,您是否需要执行一些逻辑?您可以简单地使用您已经在组件中定义的close 方法。
    • IAlert 组件将被应用程序从任何地方使用。可以让它在 DOM 上,并且只安装/卸载 Modal 吗?
    • 没关系。事实上,Transition 组件只是将它的子组件挂载到 DOM,覆盖它们的 className 以添加过渡 css 类;如果没有子节点,则实际 DOM 中将没有任何内容。检查我附在答案中的示例,您将自己看到。
    猜你喜欢
    • 2019-09-20
    • 1970-01-01
    • 2018-10-01
    • 1970-01-01
    • 2018-07-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多