在我们当前的项目中,我们对少数内容页面使用效果如手风琴。 (例如:打开https://domena.redesignum.cz/search/hello%20github点击任何域,然后在“pokračovat”的右下角)。如你看到的。当你进入另一个页面时,会出现收缩第一页和第二页的动画。反应路由器动画。如何在路由转换期间保留组件从卸载
在我目前的解决方案中,我正在使用react-routes doc的“Without React Router”解决方案。
简化代码
render() {
if(this.props.route == "/search/my-domain") {
<div className="wrapper">
<ContentTransition key="search" width="100%">
<div className="search">
<div>Search content</div>
</div>
</ContentTransition>
<ContentTransition key="domains" width={0}>
<div className="domains">
<div>Domain content</div>
</div>
</ContentTransition>
</div>
} else if(this.props.route == "/domains") {
<div className="wrapper">
<ContentTransition key="search" width={100}>
<div className="search">
<div>Search content</div>
</div>
</ContentTransition>
<ContentTransition key="domains" width={this.props.windowWidth - 100}>
<div className="domains">
<div>Domain content</div>
</div>
</ContentTransition>
</div>
}
}
页之间只有改变是ContentTransition组件属性。 ContentTransition是我的组件,它与反应Css转换的工作方式相同,但动画引擎是Greensock。
这一点是组件保存在DOM中,动画可以正常工作。
当我试图重构到react-router(1.0.0.beta3,但与0.13.3相同的问题)时,我将这个if/else拆分为单独的组件(页面)并将它们应用于路由器。
<Route component={App}>
<Route path="/search/:name" component={SearchPage} />
<Route path="/domains" component={DomainsPage} />
</Route>
// SearchPage component
render() {
<div className="wrapper">
<ContentTransition width="100%">
<div className="search">
<div>Search content</div>
</div>
</ContentTransition>
<ContentTransition width={0}>
<div className="domains">
<div>Domain content</div>
</div>
</ContentTransition>
</div>
}
// DomainPage component
render() {
<div className="wrapper">
<ContentTransition width="100%">
<div className="search">
<div>Search content</div>
</div>
</ContentTransition>
<ContentTransition width={0}>
<div className="domains">
<div>Domain content</div>
</div>
</ContentTransition>
</div>
}
动画那里,因为在每一个路径转换的页面组件被替换为另一个和子组件也能无法正常工作。这打破了动画。
这个问题有什么解决方案或最佳实践吗?
你有没有找到任何解决方案?我正在尝试做类似的事情。 –
一直都在使用react-mini-router,但这很糟糕:) – Schovi