面试题答案
一键面试实现思路
- 使用CSS的
@keyframes
规则定义淡入淡出动画。 - 利用React Router的
Routes
和Route
组件来管理路由。 - 在路由切换时,通过React的状态管理或者CSS类名的切换,使得新组件淡入,旧组件淡出。
关键代码示例
- 定义CSS动画
@keyframes fadeIn {
from {
opacity: 0;
}
to {
opacity: 1;
}
}
@keyframes fadeOut {
from {
opacity: 1;
}
to {
opacity: 0;
}
}
- React组件中使用动画
import React, { useState } from 'react';
import { Routes, Route } from 'react-router-dom';
import Home from './Home';
import About from './About';
const App = () => {
const [isFading, setIsFading] = useState(false);
const handleRouteChange = () => {
setIsFading(true);
setTimeout(() => {
setIsFading(false);
}, 300); // 动画持续时间
};
return (
<Routes onUpdate={handleRouteChange}>
<Route path="/" element={
<div className={`${isFading ? 'fadeOut' : ''}`}>
<Home />
</div>
} />
<Route path="/about" element={
<div className={`${isFading ? 'fadeOut' : ''}`}>
<About />
</div>
} />
</Routes>
);
};
export default App;
在上述代码中,handleRouteChange
函数在路由更新时触发,设置isFading
为true
,此时应用fadeOut
类名实现旧组件淡出。通过setTimeout
在动画结束后将isFading
设置回false
,新组件在没有fadeOut
类名时会正常显示(淡入效果通过@keyframes fadeIn
在CSS中自动应用,因为新组件初始状态opacity为0,随着isFading
变回false
,opacity变为1实现淡入)。