You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

React Admin自定义路由至Show视图遇问题求助

解决方案

1. 修正URL参数获取方式(核心问题)

React Router v6+已不再通过组件props传递match对象,你代码里的props.match.params.id是v5的写法,这是组件无法获取id的直接原因。

修改自定义路由,直接渲染CustomShow即可,无需在element内处理参数:

<CustomRoutes>
    <Route path="/customUserView/:id/show" element={<CustomShow resource="user" />} />
</CustomRoutes>

然后在CustomShow组件内部,用useParams钩子获取id:

import { useParams } from 'react-router-dom';
import { Show, SimpleShowLayout, TextField } from 'react-admin';

const CustomShow = ({ resource }) => {
    const { id } = useParams();
    return (
        <Show resource={resource} id={id}>
            <SimpleShowLayout>
                {/* 替换为你的自定义字段 */}
                <TextField source="name" />
                <TextField source="email" />
            </SimpleShowLayout>
        </Show>
    );
};

2. 确保组件处于React Admin上下文内

CustomShow依赖React Admin的内部上下文(比如数据提供者、权限校验等),好在CustomRoutes本身就是Admin组件的子元素,只要路由配置在Admin内部,这一步就没问题。如果出现上下文相关错误,检查组件层级,确保CustomShow没有脱离Admin的包裹范围。

3. 手动控制数据获取(可选)

如果需要更精细的控制,可直接用ShowController组件管理数据加载逻辑,避免依赖Show组件的自动参数处理:

import { useParams } from 'react-router-dom';
import { ShowController, SimpleShowLayout, TextField } from 'react-admin';

const CustomShow = ({ resource }) => {
    const { id } = useParams();
    return (
        <ShowController resource={resource} id={id}>
            {({ record, loading, error }) => {
                if (loading) return <div>加载中...</div>;
                if (error) return <div>加载失败:{error.message}</div>;
                if (!record) return <div>未找到用户数据</div>;

                return (
                    <SimpleShowLayout record={record}>
                        <TextField source="name" />
                        <TextField source="email" />
                    </SimpleShowLayout>
                );
            }}
        </ShowController>
    );
};

内容的提问来源于stack exchange,提问作者Alex Recarey

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 08:50:22