React组件渲染后如何重新调用react-router-dom的loader方法?
React Router DOM 组件渲染后重新调用 Loader 获取最新数据的方案
当然可以,在 React Router DOM v6+ 里有直接的方式实现这个需求,下面是两种常用方法:
用
useNavigation钩子的refresh方法
在组件里导入useNavigation,拿到导航实例后,执行更新操作完毕直接调用navigation.refresh(),这会重新触发当前路由的 Loader,更新路由数据并让组件重新渲染获取最新内容。示例代码:import { useNavigation, useLoaderData } from 'react-router-dom'; function TargetComponent() { const initialData = useLoaderData(); const navigation = useNavigation(); const updateAndRefresh = async () => { // 执行你的局部更新逻辑 await updatePartialInfo(initialData.id); // 触发Loader重新获取数据 navigation.refresh(); }; return ( <div> <h3>当前数据:{initialData.detail}</h3> <button onClick={updateAndRefresh}>更新后刷新数据</button> </div> ); }直接调用路由实例的
refresh方法
如果你能访问到路由实例(比如通过useRouter钩子或者路由配置时的实例),也可以直接调用router.refresh(),效果和上面一致,适合需要全局触发刷新的场景。
需要注意的是,refresh 只会重新执行当前路由的 Loader,不会触发页面跳转,也不会重置路由状态,刚好适配你更新部分信息后获取最新数据的需求。
内容的提问来源于stack exchange,提问作者Almas
相关产品推荐
相关产品推荐

