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

React Admin 是否支持在Resource名称中使用路径变量配置动态路由?

React Admin Resource路径变量配置问题解答

React Admin 原生不支持 在Resource组件的name属性中直接配置experts/:email/requests这类带路径变量的格式。name属性是资源的唯一标识,会直接映射到路由规则和dataProvider的调用入参,无法识别占位符逻辑。

两种可行解决方案

方案1:自定义路由+改造dataProvider(邮箱数量较多时推荐)

  • 仅定义一个统一的资源,name设置为expertRequests这类固定标识
  • 借助react-admin的自定义路由能力,新增/experts/:email/requests路由规则,绑定到RequestList、RequestEdit组件
  • 在列表/编辑组件内用useParams()钩子获取路径中的email参数,调用dataProvider时传入;也可直接在dataProvider层拦截expertRequests类型的请求,从当前路由提取email拼接为最终的接口请求路径

方案2:优化现有动态Resource实现(邮箱数量较少时推荐)

你当前代码的问题是邮箱列表拉取逻辑放在了App根组件,认证前就会执行。只需调整逻辑将拉取逻辑移到Admin组件的render props回调内,仅在用户认证完成、拿到身份信息后再拉取邮箱列表、生成对应Resource即可符合要求。
改造后代码示例:

function App() {
  return (
    <Admin
      authProvider={authProvider}
      dataProvider={dataProvider}
    >
      {(props) => {
        const [emails, setEmails] = useState<string[]>([]);
        const [loading, setLoading] = useState(true);

        useEffect(() => {
          // 仅管理员身份才拉取邮箱列表
          if (!props.admin) {
            setLoading(false);
            return;
          }
          (async () => {
            const experts = await firebase.firestore().collection("experts").get();
            const docIds: string[] = experts.docs.map((doc) => doc.id);
            setEmails(docIds);
            setLoading(false);
          })();
        }, [props.admin]);

        if (loading) return <div>加载中...</div>;

        if (props.admin) {
          return [
            emails.map((email) => {
              return (
                <Resource
                  key={email}
                  options={{ label: `${email}` }}
                  name={`experts/${email}/requests`}
                  list={RequestList}
                  edit={RequestEdit}
                />
              );
            }),
            <Resource name={`experts`} list={ExpertList} />,
          ];
        } else {
          return [
            <Resource
              options={{ label: `${props.email}` }}
              name={`experts/${props.email}/requests`}
              list={RequestList}
              edit={RequestEdit}
            />,
          ];
        }
      }}
    </Admin>
  );
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 12:06:05