Reactjs Api平台管理员使用guessers组件,但不使用React Admin经典组件

Reactjs Api平台管理员使用guessers组件,但不使用React Admin经典组件,reactjs,react-admin,api-platform.com,Reactjs,React Admin,Api Platform.com,我目前面临一个关于Api平台管理的问题。当我使用Api平台文档中使用的guesser组件(如“ListGuesser”或“ResourceGuesser”)时,管理员工作正常,并显示了我的用户列表。 但当我尝试使用经典的React管理组件(如“列表”或“资源”)时,管理员似乎不再调用api,我会得到一个从模板继承的空白页面,但只显示“resources.users.empty”、“resources.users.invite”、“ra.action.create” 如果我在创建表单中使用reac

我目前面临一个关于Api平台管理的问题。当我使用Api平台文档中使用的guesser组件(如“ListGuesser”或“ResourceGuesser”)时,管理员工作正常,并显示了我的用户列表。 但当我尝试使用经典的React管理组件(如“列表”或“资源”)时,管理员似乎不再调用api,我会得到一个从模板继承的空白页面,但只显示“resources.users.empty”、“resources.users.invite”、“ra.action.create”

如果我在创建表单中使用react管理组件(如“SelectInput”)而不是猜测器,则表单可以正常工作,但我的字段(如“resources.users.fields.roles”)的输出格式相同

我正在使用文档提供的Docker上运行的Api平台发行版

App.js:

import React from "react";
import { Resource } from 'react-admin';
import { Redirect, Route } from "react-router-dom";
import { HydraAdmin, hydraDataProvider as baseHydraDataProvider, fetchHydra as baseFetchHydra, ResourceGuesser } from "@api-platform/admin";
import parseHydraDocumentation from "@api-platform/api-doc-parser/lib/hydra/parseHydraDocumentation";
import authProvider from "./providers/authProvider";
import CustomComponent from "./components/CustomComponent";
import PostIcon from '@material-ui/icons/Book';
import customRoutes from './routing/customRoutes';
import {i18nProvider} from './providers/i18nProvider';
import CustomLayout from "./layouts/CustomLayout";
import {UserCreate, UserShow, UserList} from "./pages/users";


const entrypoint = process.env.REACT_APP_API_ENTRYPOINT;

const fetchHeaders = () => ({
  Authorization: `Bearer ${localStorage.getItem("token")}`,
});
const fetchHydra = (url, options = {}) =>
  localStorage.getItem("token")
    ? baseFetchHydra(url, {
      ...options,
      headers: new Headers(fetchHeaders()),
    })
    : baseFetchHydra(url, options);

const apiDocumentationParser = entrypoint => parseHydraDocumentation(entrypoint, { headers: new Headers(fetchHeaders) })
  .then(
    ({ api }) => ({ api }),
    (result) => {
      switch (result.status) {
        case 401:
          localStorage.removeItem("token");
          return Promise.resolve({
            api: result.api,
            customRoutes: [
              <Route path="/" render={() => {
                return window.localStorage.getItem("token") ? window.location.reload() : <Redirect to="/login" />
              }} />
            ],
          });

        default:
          return Promise.reject(result);
      }
    },
  );
const dataProvider = baseHydraDataProvider(
  entrypoint,
  fetchHydra,
  apiDocumentationParser
);

export default () => (
  <HydraAdmin
    dataProvider={ dataProvider }
    authProvider={ authProvider }
    entrypoint={ entrypoint }
    layout={ CustomLayout }
    i18nProvider={ i18nProvider }
    customRoutes={ customRoutes }
  >
    <ResourceGuesser name="greetings" />
    
    <Resource
      name="users"
      list={UserList}
      show={UserShow}
      create={UserCreate}
    />
    <Resource name={CustomComponent} icon={PostIcon} />
    
  </HydraAdmin>
);
从“React”导入React;
从“react admin”导入{Resource};
从“react router dom”导入{Redirect,Route};
从“@api platform/admin”导入{hydradmin,hydraDataProvider作为baseHydraDataProvider,fetchHydra作为baseFetchHydra,ResourceGuesser};
从“@api platform/api doc parser/lib/hydra/parseHydraDocumentation”导入parseHydraDocumentation;
从“/providers/authProvider”导入authProvider;
从“/components/CustomComponent”导入CustomComponent;
从“@material ui/icons/Book”导入PostIcon;
从“./routing/customRoutes”导入customRoutes;
从“/providers/i18nProvider”导入{i18nProvider};
从“/layouts/CustomLayout”导入CustomLayout;
从“/pages/users”导入{UserCreate、UserShow、UserList};
const entrypoint=process.env.REACT\u APP\u API\u entrypoint;
常量fetchHeaders=()=>({
授权:`Bearer${localStorage.getItem(“令牌”)}`,
});
const fetchHydra=(url,options={})=>
localStorage.getItem(“令牌”)
? baseFetchHydra(url{
…选项,
标题:新标题(fetchHeaders()),
})
:baseFetchHydra(url、选项);
const apiDocumentationParser=entrypoint=>parsehydrocumentation(entrypoint,{headers:newheaders(fetchHeaders)})
.那么(
({api})=>({api}),
(结果)=>{
开关(结果状态){
案例401:
localStorage.removietem(“令牌”);
还愿({
api:result.api,
海关路线:[
{
返回window.localStorage.getItem(“令牌”)?window.location.reload():
}} />
],
});
违约:
返回承诺。拒绝(结果);
}
},
);
const dataProvider=baseHydraDataProvider(
入口点,
水螅,
ApicDocumentationParser
);
导出默认值()=>(
);
My users.js:


import * as React from "react";
import { List, Datagrid, TextField, EmailField, ReferenceField, EditButton, Edit, SimpleForm, TextInput, ReferenceInput, SelectInput, Create, Filter, SimpleList } from 'react-admin';
import {
  HydraAdmin,
  ResourceGuesser,
  ListGuesser,
  CreateGuesser,
  FieldGuesser, ShowGuesser, InputGuesser
} from "@api-platform/admin";
import { useMediaQuery } from '@material-ui/core';

const userRowBackgroundColor = (record, index) => {

  if (record.email != null && record.password != null) {
    const backgroundColor = {
      backgroundColor: 'white'
    }
    return backgroundColor;

  } else {
    const backgroundColor = {
      backgroundColor: '#F5BB34'
    }
    return backgroundColor;
  }

}

const postRowStyle = (record, index) => ({
  backgroundColor: record.username.length >= 10 ? '#efe' : 'red',
});

export const UserList = props => {
  const isSmall = useMediaQuery(theme => theme.breakpoints.down('sm'));
  return (
    <div>
      <List {...props}>
        {isSmall ? (
          <SimpleList
            primaryText={record => record.username}
            secondaryText={record => `mail : ${record.email}`}
          />
        ) : (
          <Datagrid rowClick="edit" >
            <TextField source="id" />
            <EmailField source="email" />
            <TextField source="roles" />
          </Datagrid>
        )}
      </List>
    </div>
  )
};

export const UserShow = (props) => (
  <ShowGuesser {...props}>
    <FieldGuesser source="email" addLabel={true} />
  </ShowGuesser>
);

export const UserCreate = (props) => (
  <CreateGuesser {...props}>
    <InputGuesser source="email" />

    <SelectInput source="roles" choices={[
      { id: ['ROLE_ADMIN'], name: 'Administrateur' },
      { id: ['ROLE_USER'], name: 'Utilisateur' }
    ]} />

    <TextInput type="password" source="plainPassword" />

  </CreateGuesser>
);


从“React”导入*作为React;
从“react admin”导入{List、Datagrid、TextField、EmailField、ReferenceField、EditButton、Edit、SimpleForm、TextInput、ReferenceInput、SelectInput、Create、Filter、SimpleList};
进口{
海德拉丹,
智囊团,
ListGuesser,
CreateGuesser,
字段猜测器,显示猜测器,输入猜测器
}来自“@api平台/管理员”;
从“@material ui/core”导入{useMediaQuery};
const userRowBackgroundColor=(记录、索引)=>{
if(record.email!=null&&record.password!=null){
常量背景色={
背景颜色:“白色”
}
返回背景色;
}否则{
常量背景色={
背景颜色:“#F5BB34”
}
返回背景色;
}
}
const postRowStyle=(记录、索引)=>({
背景色:record.username.length>=10?“#efe”:“红色”,
});
export const UserList=props=>{
const isSmall=useMediaQuery(theme=>theme.breakpoints.down('sm');
返回(
{isSmall(
record.username}
secondaryText={record=>`mail:${record.email}`}
/>
) : (
)}
)
};
导出常量UserShow=(道具)=>(
);
导出常量UserCreate=(道具)=>(
);
欢迎任何帮助,谢谢