当您使用任何第三方库时,您需要遵守他们的规则。在这里,您使用的是 React 管理库,它支持添加/编辑/列表等普通管理功能。您可以轻松创建管理面板。
因此,当您专注于使用 React Admin 创建表单时,您可以创建添加/编辑表单。
在您的App.js 中,您需要首先使用包含创建和编辑属性的Resource 定义路由。在创建/编辑中,您可以导入您的添加/编辑组件并传递它。示例如下。你可以看到dataProvider链接也提供了。当您创建编辑表单时,它将从那里获取数据
// in src/App.js
import * as React from "react";
import { Admin, Resource } from 'react-admin';
import jsonServerProvider from 'ra-data-json-server';
import { PostCreate, PostEdit } from './posts';
const App = () => (
<Admin dataProvider={jsonServerProvider('https://jsonplaceholder.typicode.com')}>
<Resource name="posts" create={PostCreate} edit={PostEdit} />
</Admin>
);
export default App;
创建正确的路由后,您可以转到您的组件并可以创建添加/编辑表单,如下所示
// in src/posts.js
import * as React from "react";
import { Create, Edit, SimpleForm, TextInput, DateInput, ReferenceManyField, Datagrid, TextField, DateField, EditButton } from 'react-admin';
import RichTextInput from 'ra-input-rich-text';
export const PostCreate = (props) => (
<Create {...props}>
<SimpleForm>
<TextInput source="title" />
<TextInput source="teaser" options={{ multiLine: true }} />
<RichTextInput source="body" />
<DateInput label="Publication date" source="published_at" defaultValue={new Date()} />
</SimpleForm>
</Create>
);
export const PostEdit = (props) => (
<Edit {...props}>
<SimpleForm>
<TextInput disabled label="Id" source="id" />
<TextInput source="title" validate={required()} />
<TextInput multiline source="teaser" validate={required()} />
<RichTextInput source="body" validate={required()} />
<DateInput label="Publication date" source="published_at" />
<ReferenceManyField label="Comments" reference="comments" target="post_id">
<Datagrid>
<TextField source="body" />
<DateField source="created_at" />
<EditButton />
</Datagrid>
</ReferenceManyField>
</SimpleForm>
</Edit>
);
React-admin 为创建和编辑视图注入了一些属性:资源名称、basePath(根 URL)、权限,以及在编辑视图的情况下,记录 ID。这就是为什么你需要将 props 传递给 <Create> 和 <Edit> 组件。
<Create> 和<Edit> 组件调用dataProvider,准备表单提交处理程序,并呈现页面标题和操作。
您在问题中提到的<SimpleForm> 仅负责创建表单,它不负责handleSubmit 操作,<Create> 和<Edit> 组件负责处理。
想了解更多详情请关注React Admin <Create> and <Edit> doc。