【发布时间】:2020-11-06 04:07:56
【问题描述】:
我正试图弄清楚如何在应用启动时仅触发动画一次..
目前我面临的问题是,如果我切换到另一个视图(另一个组件,使用 React-router-dom)然后切换回 Home 组件,动画会再次触发。我正在为这个动画使用 react-spring。
我只想让该动画在应用启动时触发一次。不是每次切换到主页后。 React-spring 中是否有任何配置,或者你们知道如何防止这种情况?我真的找不到任何有用的东西。
设置动画
//State for animation
const [showGameOptions, setShowGameOptions] = useState(true);
//Starting animation
const gameOptionsTransitions = useTransition(showGameOptions, null, {
from: { opacity: 0, transform: 'translateY(200px)' },
enter: { opacity: 1, transform: 'translateY(0)' },
leave: { opacity: 0, transform: 'translateY(200px)' },
});
我已将初始状态设置为 true,因为我想在开始时触发该动画。这部分效果很好。
Home 组件的 return()
<div className="homeScreen">
<h1>Tic Tac Toe</h1>
<p>Select game mode</p>
{gameOptionsTransitions.map(
({ item, key, props }) =>
item && (
<animated.div key={key} style={props}>
<Link to="/play" className="setGameMode-btn" onClick={playPlayerVsComputer}>
Player vs. Computer
</Link>
<Link to="/play" className="setGameMode-btn" onClick={playPlayerVsPlayer}>
Player vs. Player
</Link>
</animated.div>
),
)}
</div>
【问题讨论】:
-
您可以使用浏览器历史记录来确保您已经访问过主页。你试过了吗?你已经在使用 react-router-dom 了。
-
不,我没试过。我对此有点陌生,所以这就是我在这里寻求帮助的原因。浏览器历史记录很难吗?
-
您可以使用
useEffect在渲染组件时触发动画。但问题是当您访问该组件时,您的动画会一次又一次地触发。这就是现在发生的事情。我说的对吗? -
是的。你说的对 。我在发布这个问题之前尝试过这种 useEffect 方法:/
标签: javascript reactjs react-router react-spring