Can I get result of useCreate()?

I would like to get auto generate Id that why I want to get result useCreate() mutation. but I can get undefined data with onSuccess: (data, variables, context)
10 Replies
kapa.ai
kapa.ai8mo ago
Hi @yasuaki_jp. I'm kapa.ai, your friendly support bot. I will try to answer your question by searching through the knowledge base. :wave: ---------------------- In refine, the useCreate hook is used to create new records. When the mutation is successful, it returns a data object which should contain the auto-generated ID of the newly created record. This data object is one of the parameters received by the onSuccess or onMutationSuccess callback function. Here is a basic usage example of useCreate:
import { useCreate } from "@refinedev/core";

const { mutate } = useCreate();

mutate({
resource: "products",
values: {
name: "New Product",
material: "Wood",
},
});
import { useCreate } from "@refinedev/core";

const { mutate } = useCreate();

mutate({
resource: "products",
values: {
name: "New Product",
material: "Wood",
},
});
If you're getting undefined for data, it might be due to the response from your dataProvider. Ensure that your dataProvider's create method is returning the correct data. For more information, refer to the useCreate documentation → (https://refine.dev/docs/api-reference/core/hooks/data/useCreate/). ---------------------- Note: you can ask me a follow up question by @ mentioning me again :speech_balloon: ----------------------
kapa.ai
kapa.ai8mo ago
<@449197041306828802> kapa.ai is still learning and improving, please let us know how it did by reacting below
conscious-sapphire
conscious-sapphire8mo ago
@kapa.ai how can I get returns a data object which should contain the auto-generated ID of the newly created recor
kapa.ai
kapa.ai8mo ago
Let me check the knowledge base for you. One moment! :books: ---------------------- The useCreate hook in refine returns a mutate function which you can use to create a new record. When the mutate function is called, it returns a promise that resolves with the result of the mutation. This result should contain the auto-generated ID of the newly created record. Here's an example of how you can use the mutate function and get the auto-generated ID:
import { useCreate } from "@refinedev/core";

const { mutate } = useCreate();

const createNewRecord = async () => {
const { data } = await mutate({
resource: "products",
values: {
name: "New Product",
material: "Wood",
},
});

console.log(data.id); // This should log the auto-generated ID
};

createNewRecord();
import { useCreate } from "@refinedev/core";

const { mutate } = useCreate();

const createNewRecord = async () => {
const { data } = await mutate({
resource: "products",
values: {
name: "New Product",
material: "Wood",
},
});

console.log(data.id); // This should log the auto-generated ID
};

createNewRecord();
In this example, data is the result of the mutation and data.id should be the auto-generated ID of the newly created record. For more information, refer to the useCreate documentation → (https://refine.dev/docs/api-reference/core/hooks/data/useCreate/). ---------------------- Note: you can ask me a follow up question by @ mentioning me again :speech_balloon: ----------------------
kapa.ai
kapa.ai8mo ago
<@449197041306828802> kapa.ai is still learning and improving, please let us know how it did by reacting below
conscious-sapphire
conscious-sapphire8mo ago
@kapa.ai Property 'data' does not exist on type 'void'. (tsserver 2339)
kapa.ai
kapa.ai8mo ago
Let me check the knowledge base for you. One moment! :books: ---------------------- The error message you're seeing suggests that the mutate function is not returning a promise that resolves with an object containing a data property. This could be due to the way your dataProvider is set up or how you're using the mutate function. In refine, the mutate function returned by useCreate does not directly return the data. Instead, it returns a mutation object from which you can extract the data property. Here's how you can do it:
import { useCreate } from "@refinedev/core";

const { mutate } = useCreate();

const createNewRecord = async () => {
const mutation = await mutate({
resource: "products",
values: {
name: "New Product",
material: "Wood",
},
});

// The 'data' property is available on the 'mutation' object
console.log(mutation.data.id); // This should log the auto-generated ID
};

createNewRecord();
import { useCreate } from "@refinedev/core";

const { mutate } = useCreate();

const createNewRecord = async () => {
const mutation = await mutate({
resource: "products",
values: {
name: "New Product",
material: "Wood",
},
});

// The 'data' property is available on the 'mutation' object
console.log(mutation.data.id); // This should log the auto-generated ID
};

createNewRecord();
Please note that the data property will be undefined until the mutation is completed. Therefore, you should ensure that the mutation has completed before trying to access the data property. For more information, refer to the useCreate documentation → (https://refine.dev/docs/api-reference/core/hooks/data/useCreate/). ---------------------- Note: you can ask me a follow up question by @ mentioning me again :speech_balloon: ----------------------
kapa.ai
kapa.ai8mo ago
<@449197041306828802> kapa.ai is still learning and improving, please let us know how it did by reacting below
fair-rose
fair-rose8mo ago
Hello @yasuaki_jp You may have some errors on your request to API, you can also check onError to see if there are any errors.
conscious-sapphire
conscious-sapphire7mo ago
yes, I checked onError but I can't get results. https://github.com/refinedev/refine/issues/4212 I solved with this. thanks
GitHub
[BUG] Supabase not receiving back data on insert/update · Issue #42...
Describe the bug Supabase (PostgREST) requires explicitly asking for data back when creating or updating using .select(), which is not currently present. Steps To Reproduce Setup a project with sup...