React-Admin:自定义路由点击保存后如何重定向至指定资源列表?
解决React Admin自定义批量创建组件保存后跳转到指定资源List页面的问题
我明白你遇到的问题了——React Admin默认的跳转逻辑在自定义路由+跨资源场景下确实不太灵活,不过我们可以通过接管成功后的跳转逻辑来完美解决这个需求。
核心问题拆解
你的AssetsBulkCreate组件绑定的是assets/bulkInsert这个资源,React Admin默认会基于当前资源去匹配对应的list页面(也就是/assets/bulkInsert),但这个页面并不存在,所以才会 fallback 跳转到Dashboard。而redirect属性只能针对当前资源的内置页面(list/edit/show),没法跨资源指定,所以我们需要手动控制跳转行为。
方案1:自定义Create组件的onSuccess回调(最简单直接)
直接给Create组件传入自定义的onSuccess函数,手动跳转到assets资源的list页面:
import { useNavigate } from 'react-router-dom'; // React Router v6 用这个,v5请换成useHistory import { Create } from 'react-admin'; export const AssetsBulkCreate = ({ permissions, ...props }) => { const navigate = useNavigate(); // v5替换为 const history = useHistory(); // 覆盖默认的成功跳转逻辑 const handleSuccess = () => { navigate('/assets'); // 直接指定assets资源的list页面路径 // v5版本用 history.push('/assets'); }; return ( <Create resource="assets/bulkInsert" onSuccess={handleSuccess} {...props} > {/* 你的批量创建表单内容 */} </Create> ); };
方案2:手动处理保存流程(适合需定制保存逻辑的场景)
如果需要对保存请求做额外处理(比如数据预处理、参数定制),可以用useCreate钩子手动发起请求,成功后再跳转:
import { useNavigate } from 'react-router-dom'; import { useCreate, CreateForm } from 'react-admin'; export const AssetsBulkCreate = ({ permissions, ...props }) => { const navigate = useNavigate(); const [create] = useCreate(); const handleSave = async (formValues) => { try { // 手动发起批量创建请求 await create('assets/bulkInsert', { data: formValues }); // 请求成功后跳转到assets的list页面 navigate('/assets'); } catch (error) { // 这里可以添加错误提示逻辑,比如给用户弹出保存失败的通知 console.error('批量创建资产失败:', error); } }; return ( <CreateForm onSubmit={handleSave} {...props}> {/* 你的表单内容 */} </CreateForm> ); };
为什么这个方法有效?
通过自定义onSuccess或者手动处理保存后的跳转,我们完全绕过了React Admin基于当前资源的默认跳转逻辑,直接指定了目标路径/assets——这正是assets资源的list页面路由,完美满足你的需求。
内容的提问来源于stack exchange,提问作者user2078023
相关产品推荐
相关产品推荐

