【发布时间】:2018-03-04 12:40:13
【问题描述】:
我一直在使用类来控制带有 CSS 转换效果的打开/关闭行为。我在其他组件上使用过这个,没问题,但由于某种原因,在这种情况下,同样的方法让我失败了......
打开/关闭行为附加(我看到带有背景颜色和 translateY 的最终差异)但 CSS 过渡本身丢失了......有什么想法为什么我丢失了 CSS 过渡但其他一切都按预期工作?
注意,当我使用开发者工具手动切换打开/关闭类时,它工作得很好! CSS 过渡开始了!
那么 React on click 来切换类应用,但失去了 CSS 过渡是怎么回事?
class Projects extends React.Component {
/* constructor, etc... */
render() {
return (
<div className="projects-nav-container">
<div className="center title monospace" onClick={this.props._toggleProjectNav} id="Menu">Menu</div>
<ul className={`projects-nav ${this.props._isProjectNavOpen ? 'open' : 'closed'}`}>
{ PROJECTS.map((project, index) =>
<li key={index} >
<p>project here</p>
</li>
) }
</ul>
</div>
);
}
}
App.js 看起来是这样的:
class App extends React.Component {
constructor() {
super();
this.state = {
_isProjectNavOpen: true
}
this._toggleProjectNav = this._toggleProjectNav.bind(this);
}
_toggleProjectNav() {
this.setState(prevState => ({
_isProjectNavOpen: !prevState._isProjectNavOpen,
}));
}
render() {
<div>
<Router>
<Route path="/projects" component={(props, state, params) =>
<Projects
_toggleProjectNav={this._toggleProjectNav}
_isProjectNavOpen={this.state._isProjectNavOpen}
{...props} />} />
</Router>
</div>
}
}
SCSS:
.projects-nav {
@include transition(all $transition_speed ease);
&.open {
@include transform(translateY(0));
background: red
}
&.closed {
@include transform(translateY(-100vh));
background: green;
}
}
【问题讨论】:
-
它必须完全替换 DOM 元素。当您打开 DevTools 并切换菜单时,整个 DOM 元素会闪烁,还是仅闪烁其
class属性? -
我赌的是路由器库。如果您不将
Projects与Route和Router包装在一起,您能否尝试一下它是否有效?还有你使用哪个 react-router 版本? -
您的代码没有显示 CSS 过渡组的导入? import { CSSTransitionGroup } from 'react-transition-group' .... 过渡和反应存在一些问题(这就是原始插件发布的原因).. 有一篇很好的文章 here
标签: javascript css reactjs css-transitions