我的React项目将数据从一个组件传递到FoodDetails
,这是可行的,但我希望它在useLocation
的location
的state
属性为空时导航离开。
代码:
const FoodDetails = () => {
const navigate = useNavigate();
const location = useLocation();
if (location.state === null) {
navigate("/")
}
const food = location.state.food;
return (
<div className='FoodDetails'>
<div className="FoodDetailsName">{food.name}</div>
</div>
)
}
export default FoodDetails
它进入if
,但它 * 忽略 * navigate("/")
。我在它后面放了一个return,return工作,所以它只是忽略了导航。
为什么它会忽略它,我该如何修复它?
2条答案
按热度按时间i7uq4tfw1#
你需要把
navigate("/")
放在useEffect
里面,类似于:useEffect
的回调函数将在每次其依赖项数组中的某个内容发生更改时运行。在本例中为locationState
。请注意,在useEffect
之前解构依赖项是一个好主意。qmb5sa222#
navigate
函数发出一个命令式导航操作,当前的实现是作为一个 * 无意的 * 副作用调用的。虽然您 * 可以 * 使用useEffect
钩子来调用navigate
作为一个 * 有意的 * 副作用,但组件仍然会先呈现 * 然后 * 调用useEffect
钩子回调。您将立即看到返回的JSX。我建议有条件地呈现
Navigate
组件,它将在初始呈现周期中发出一个声明性导航操作,其他食物细节JSX将没有机会呈现。在任何一种情况下,
FoodDetails
组件和路由/页面都将被加载/呈现。这只是一种减轻呈现不希望用户看到的瞬时UI的方法。示例: