React Router Transition 与手风琴布局
React Router Transition with Accordion layout
我正在用 React 重建我的网站。
我遇到了反应路由器和反应过渡组的问题。
在 React 路由器文档中有一个如何创建动画过渡的指南。但是它附加到某个布局:
nav
- link a
- link b
- link c
container
- body a
- body b
- body c
据我了解,这里的关键点是用 TransitionGroup、CSSTransition 和 Swtich 包裹所有主体。我或多或少知道它是如何工作的。
Transition Group 保留之前的路由主体并将其过渡出去。
但正如我已经说过的,这个解决方案附加到这个布局。
在我的网站上,我有这样的布局:
- link a
- body a (slides down on link click)
- link b
- body b (slides down on link click)
- link c
- body c (slides down on link click)
我的网站参考:https://dmws.me/
您能否为我推荐此布局的最佳做法?
好的,在多次尝试和失败之后,我找到了一个可行的解决方案。
关键点在 Router 文档 => 路由渲染方法 => children
https://reacttraining.com/react-router/web/api/Route/children-func
这是我的代码:
<div>
<Link to="/">Home</Link>
<Route
exact
path="/"
children={({ match, ...rest }) => (
<CSSTransition
in={match}
timeout={500}
classNames="foo"
mountOnEnter
unmountOnExit
>
<Home />
</CSSTransition>
)}
/>
<Link to="/about">About</Link>
<Route
path="/about"
children={({ match, ...rest }) => (
<CSSTransition
in={match}
timeout={500}
classNames="foo"
mountOnEnter
unmountOnExit
>
<About />
</CSSTransition>
)}
/>
</div>
我正在用 React 重建我的网站。 我遇到了反应路由器和反应过渡组的问题。 在 React 路由器文档中有一个如何创建动画过渡的指南。但是它附加到某个布局:
nav
- link a
- link b
- link c
container
- body a
- body b
- body c
据我了解,这里的关键点是用 TransitionGroup、CSSTransition 和 Swtich 包裹所有主体。我或多或少知道它是如何工作的。
Transition Group 保留之前的路由主体并将其过渡出去。
但正如我已经说过的,这个解决方案附加到这个布局。
在我的网站上,我有这样的布局:
- link a
- body a (slides down on link click)
- link b
- body b (slides down on link click)
- link c
- body c (slides down on link click)
我的网站参考:https://dmws.me/
您能否为我推荐此布局的最佳做法?
好的,在多次尝试和失败之后,我找到了一个可行的解决方案。
关键点在 Router 文档 => 路由渲染方法 => children
https://reacttraining.com/react-router/web/api/Route/children-func
这是我的代码:
<div>
<Link to="/">Home</Link>
<Route
exact
path="/"
children={({ match, ...rest }) => (
<CSSTransition
in={match}
timeout={500}
classNames="foo"
mountOnEnter
unmountOnExit
>
<Home />
</CSSTransition>
)}
/>
<Link to="/about">About</Link>
<Route
path="/about"
children={({ match, ...rest }) => (
<CSSTransition
in={match}
timeout={500}
classNames="foo"
mountOnEnter
unmountOnExit
>
<About />
</CSSTransition>
)}
/>
</div>