ReactCSSTransitionGroup不起作用

时间:2016-06-25 13:20:01

标签: javascript css animation reactjs

我在使用ReactCSSTransitionGroup时遇到了一些麻烦。当用户点击页面上的按钮时,我想要显示一些带有一些奇特动画的Modal表单。这是代码:

import React from 'react';
import ReactDOM from 'react-dom';
import AppConfig from './AppConfig';

export default class AppTop extends React.Component {
    constructor(props) {
        super(props);
        this.state = { openConfig: false };
    }
    toggleConfig() {
        this.setState({ openConfig: !this.state.openConfig });
    }
    render() {
        // only shows up openConfig is true
        const domAppConfig = this.state.openConfig ? <AppConfig ... /> : '';

        return (
            <div>
                ... //some elements
                <button onClick={this.toggleConfig.bind(this)}>Config</button>
                { domAppConfig }
            </div>
        );
    }
}

这是AppTop组件。你可以看到render里面的按钮组件,点击这个,openConfig状态就会切换。现在这是AppConfig组件:

import React from 'react';
import ReactCSSTransitionGroup from 'react-addons-css-transition-group';

export default class AppConfig extends React.Component {
    render() {
        return (
            <ReactCSSTransitionGroup
                transitionName="anim-app-config"
                transitionEnterTimeout={300}
                transitionLeaveTimeout={300}
            >
                <div id="app-config">
                    <h1>App Config</h1>
                    <p>Helloworld!</p>
                </div>
            </ReactCSSTransitionGroup>
        );
    }
}

组件非常简单,只需打印一些文本。这就是&#39; .anim-app-config&#39;:

的风格
.anim-app-config-enter {
    opacity: .1;
}
.anim-app-config-enter.anim-app-config-enter-active {
    opacity: 1;
    transition: opacity 300ms ease-in;
}
.anim-app-config-leave {
    opacity: 1;
}
.anim-app-config-leave.anim-app-config-leave-active {
    opacity: .1;
    transition: opacity 300ms ease-in;
}

当我运行此应用程序时,动画不起作用。只是组件显示并立即隐藏,没有动画。我搜索了这个,我尝试在AppConfig组件中添加一个键,它没有用。再包装一个div也没有用。添加transitionAppear = {true}对我来说也不起作用。

使用ReactCSSTransitionGroup组件我错了吗?或者我错过了什么?很难在React上添加动画给我,所以请给我一些建议。感谢。

2 个答案:

答案 0 :(得分:1)

你的Apptop中应该有ReactCSSTransitionGroup,因为它将呈现与否。在AppConfig中制作它不会有任何动画,因为它会将它渲染为直接组件。

import React from 'react';
import ReactDOM from 'react-dom';
import AppConfig from './AppConfig';

export default class AppTop extends React.Component {
    constructor(props) {
        super(props);
        this.state = { openConfig: false };
    }
    toggleConfig() {
        this.setState({ openConfig: !this.state.openConfig });
    }
    render() {
        // only shows up openConfig is true
        const domAppConfig = this.state.openConfig ? <AppConfig ... /> : '';

        return (
            <div>
                ... //some elements
                <button onClick={this.toggleConfig.bind(this)}>Config</button>
                        <ReactCSSTransitionGroup
                transitionName="anim-app-config"
                transitionEnterTimeout={300}
                transitionLeaveTimeout={300}
            >
                {domAppconfig}
            </ReactCSSTransitionGroup>
            </div>
        );
    }
}

答案 1 :(得分:0)

  

您必须为ReactCSSTransitionGroup的所有子项提供键属性,即使只渲染单个项目也是如此。这就是React将如何确定哪些孩子已进入,离开或留下。

尝试将key="1"之类的内容添加到<div id="app-config">,看看是否有帮助。