Skip to main content
Version: 4.xx.xx

4. Adding Create Page

Creating Create Page

First, we need to create our file, named create.tsx, under the src/pages/blog-posts folder. We will then copy the create page code generated by Inferencer and paste it into the file; for this, follow these steps:

  1. Navigate to localhost:3000/blog-posts in your browser.

  2. Click the "Create" button in the top right corner of the table to open the create page.

  3. On the create page, click on the "Show Code" button in the bottom right corner of the page.

  4. You can see the create page code generated by Inferencer. Copy it by clicking on the "Copy" button.

  5. Paste the code into the newly created create.tsx file.

You can see an example create page generated by Inferencer below:

localhost:3000/blog-posts/create

Understanding the Create Component

Hooks and Components in Create Page

  • <Create/> is a Refine component that is used for presentation purposes like showing the title of the page, save button etc.

    For more information, refer to the <Create/> documentation

  • <Form/> and <Form.Item/> are Ant Design components that are used to build the form.

    For more information, refer to the Ant Design <Form/> documentation

  • useForm is a Refine hook that provides the necessary props for the form. When used in the create page, it sends the form data to dataProvider's create method when the form is submitted. It also offers saveButtonProps for the form's submit button.

    For more information, refer to the useForm documentation

Handling Relationships

In the create page, we may need to select a record from another resource.

For example, if we need to select a category from the categories resource to assign the blog post to the category, we can use the useSelect hook provided by Refine. This hook fetches the data by passing the params to the dataProvider's getList method and then returns the necessary props to be used in the <Select/> component.

In the auto-generated create page code, Inferencer used the useSelect hook to select a category from the categories resource like below:

const { selectProps: categorySelectProps } = useSelect({
resource: "categories",
});

For more information, refer to the useSelect documentation and the Ant Design <Select/> documentation

Adding the Create Page to the App

Now that we have created the create page, we can add it to the App.tsx file:

  1. Open src/App.tsx file on your editor.

  2. Import the created BlogPostCreate component.

  3. Replace the AntdInferencer component with the BlogPostCreate component.

src/App.tsx
import { ErrorComponent, ThemedLayoutV2, RefineThemes, notificationProvider } from "@refinedev/antd";
import { Refine } from "@refinedev/core";
import routerBindings, { NavigateToResource, UnsavedChangesNotifier } from "@refinedev/react-router-v6";
import dataProvider from "@refinedev/simple-rest";

import { BrowserRouter, Outlet, Route, Routes } from "react-router-dom";

import { BlogPostEdit } from "pages/blog-posts/edit";
import { BlogPostList } from "pages/blog-posts/list";
import { BlogPostShow } from "pages/blog-posts.show";
import { BlogPostCreate } from "pages/blog-posts/create";

import { ConfigProvider } from "antd";
import "@refinedev/antd/dist/reset.css";

const App: React.FC = () => {
return (
<BrowserRouter>
<ConfigProvider theme={RefineThemes.Blue}>
<Refine
routerProvider={routerBindings}
dataProvider={dataProvider("https://api.fake-rest.refine.dev")}
notificationProvider={notificationProvider}
resources={[
{
name: "blog_posts",
list: "/blog-posts",
show: "/blog-posts/show/:id",
create: "/blog-posts/create",
edit: "/blog-posts/edit/:id",
},
]}
options={{
syncWithLocation: true,
warnWhenUnsavedChanges: true,
}}
>
<Routes>
<Route
element={
<ThemedLayoutV2>
<Outlet />
</ThemedLayoutV2>
}
>
<Route index element={<NavigateToResource resource="blog_posts" />} />
<Route path="blog-posts">
<Route index element={<BlogPostList />} />
<Route path="show/:id" element={<BlogPostShow />} />
<Route path="create" element={<BlogPostCreate />} />
<Route path="edit/:id" element={<BlogPostEdit />} />
</Route>

<Route path="*" element={<ErrorComponent />} />
</Route>
</Routes>
<UnsavedChangesNotifier />
</Refine>
</ConfigProvider>
</BrowserRouter>
);
};
export default App;

Now, we can see the create page in the browser at localhost:3000/blog-posts/create


Checklist