过渡部分在 React Router 4 中起作用
Transitions partially working in react router 4
我正在尝试使用 React router 4 和 CSSTransitionGroup 为路由之间的转换设置动画。似乎部分工作 - 进入组件有时会根据需要进行动画处理(但并非总是如此),退出组件消失而没有过渡。
这是未按预期运行的渲染函数:
render() {
/****************************************For transitions***********/
// const locationKey = this.props.location.pathname;
return (
<CSSTransitionGroup
key={this.props.location.key}
transitionName="flipIt"
transitionAppear={true}
transitionAppearTimeout={3000}
transitionEnterTimeout={3000}
transitionLeaveTimeout={3000}
>
<Switch key={this.props.location.pathname} location={this.props.location}>
<Route exact path='/' component={Welcome} />
<Route path='/game' render={(props) => (
<Board {...props} leaders={this.state.leaders} logGameGoes={this.setGameGoes} />
)} />
<Route path='/leaderboard' render={(props) => (
<Leaderboard {...props} leaders={this.state.leaders} syncLeaders={this.syncLeaders} />
)} />
<Route path='/winner' render={(props) => (
<Winner {...props} addLeader={this.addLeader} />
)} />
<Route path='/gameover' render={(props) => (
<Gameover {...props} goes={this.state.currentGameGoes} />
)} />
</Switch>
</CSSTransitionGroup>
);
}
}
export default withRouter(App);
可以在此沙盒中看到整个应用程序:
https://codesandbox.io/s/vyn7zl2993
非常感谢您的帮助。
Switch 将呈现匹配的路线。假设 game
匹配 => 游戏将渲染,一旦安装组件,出现转换将 运行。现在您转到 winner
,这将卸载 game
并安装 winner
路由。您会期望 leave
过渡从 game
开始,但会发生的是 game
将从 dom 中删除(因为卸载),所以运行 什么都没有,休假过渡将不起作用。出现转换将从 winner
路线开始。那么该怎么办?
您可以使用子函数 (https://reacttraining.com/react-router/web/api/Route/children-func) 并在卸载路由之前使组件不可见。您不能为此使用 Switch,因为它专门呈现路由。
我正在尝试使用 React router 4 和 CSSTransitionGroup 为路由之间的转换设置动画。似乎部分工作 - 进入组件有时会根据需要进行动画处理(但并非总是如此),退出组件消失而没有过渡。 这是未按预期运行的渲染函数:
render() {
/****************************************For transitions***********/
// const locationKey = this.props.location.pathname;
return (
<CSSTransitionGroup
key={this.props.location.key}
transitionName="flipIt"
transitionAppear={true}
transitionAppearTimeout={3000}
transitionEnterTimeout={3000}
transitionLeaveTimeout={3000}
>
<Switch key={this.props.location.pathname} location={this.props.location}>
<Route exact path='/' component={Welcome} />
<Route path='/game' render={(props) => (
<Board {...props} leaders={this.state.leaders} logGameGoes={this.setGameGoes} />
)} />
<Route path='/leaderboard' render={(props) => (
<Leaderboard {...props} leaders={this.state.leaders} syncLeaders={this.syncLeaders} />
)} />
<Route path='/winner' render={(props) => (
<Winner {...props} addLeader={this.addLeader} />
)} />
<Route path='/gameover' render={(props) => (
<Gameover {...props} goes={this.state.currentGameGoes} />
)} />
</Switch>
</CSSTransitionGroup>
);
}
}
export default withRouter(App);
可以在此沙盒中看到整个应用程序: https://codesandbox.io/s/vyn7zl2993
非常感谢您的帮助。
Switch 将呈现匹配的路线。假设 game
匹配 => 游戏将渲染,一旦安装组件,出现转换将 运行。现在您转到 winner
,这将卸载 game
并安装 winner
路由。您会期望 leave
过渡从 game
开始,但会发生的是 game
将从 dom 中删除(因为卸载),所以运行 什么都没有,休假过渡将不起作用。出现转换将从 winner
路线开始。那么该怎么办?
您可以使用子函数 (https://reacttraining.com/react-router/web/api/Route/children-func) 并在卸载路由之前使组件不可见。您不能为此使用 Switch,因为它专门呈现路由。