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

React Admin:如何从触发页传递realm_id至Client创建组件并显示指定Realm

解决方案:传递realm_id到ClientCreate组件并限制Realm选项

要实现从触发创建的页面传递realm_id到ClientCreate组件,仅显示对应单个Realm,可按以下步骤修改代码:

1. 修改CreateButton,传递realm_id参数

假设你的CreateButton位于Realm相关页面(如RealmShow或RealmList),通过to属性将当前页面的realm_id作为查询参数附加到创建路径中:

<TopToolbar>
  <CreateButton 
    basePath="/clients"
    to={{
      pathname: '/clients/create',
      // record.id为当前页面的Realm ID,根据实际场景调整取值逻辑
      search: `?realm_id=${record.id}`
    }}
  />
</TopToolbar>

2. 修改ClientCreate组件,接收并处理realm_id

通过react-router-dom的useLocation钩子获取URL中的realm_id参数,可选择以下两种方式处理Realm输入:

方式一:隐藏Realm输入字段(推荐)

直接将realm_id作为隐藏字段传入表单,不显示下拉选择框:

import { useLocation } from 'react-router-dom';
import { Create, SimpleForm, TextInput, HiddenInput } from 'react-admin';

export const ClientCreate = (props) => {
  const location = useLocation();
  const realmId = new URLSearchParams(location.search).get('realm_id');

  return (
    <Create {...props}>
      <SimpleForm initialValues={{ realm_id: realmId }}>
        <HiddenInput source="realm_id" />
        <TextInput fullWidth source="client_name" label="Client name" />
      </SimpleForm>
    </Create>
  );
};

方式二:保留下拉框但仅显示对应Realm

如果需要展示Realm信息但不允许修改,可过滤下拉选项并禁用输入:

import { useLocation } from 'react-router-dom';
import { Create, SimpleForm, TextInput, ReferenceInput, SelectInput } from 'react-admin';

export const ClientCreate = (props) => {
  const location = useLocation();
  const realmId = new URLSearchParams(location.search).get('realm_id');

  return (
    <Create {...props}>
      <SimpleForm initialValues={{ realm_id: realmId }}>
        <ReferenceInput 
          label="Realm" 
          source="realm_id" 
          reference="realms"
          filter={{ id: realmId }}
          disabled
        >
          <SelectInput optionText="id" />
        </ReferenceInput>
        <TextInput fullWidth source="client_name" label="Client name" />
      </SimpleForm>
    </Create>
  );
};

3. 确认App配置无需修改

原有的App资源配置保持不变即可,参数传递逻辑已通过路由查询参数实现:

const App = () => (
    <Admin dataProvider={dataProvider} layout={AppLayout}>
        <Resource name="realms" list={RealmsList} show={RealmShow} edit={RealmEdit} create={RealmCreate}/>
        <Resource name="clients" edit={ClientEdit} create={ClientCreate}/>
    </Admin>
);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 12:40:25