Как правильно отправить объект в ремикс с помощью useSubmit()?
Нужно ли мне сначала это сделать? Тогда JSON.stringify() оно в действии?
Мой код ниже работает, но не уверен, что это лучший способ?
onSubmit()
const onSubmit = () => {
const updatedContact = {
name: "John Doe",
email: "",
};
const updatedOrder = {
products: [
{
id: 1,
name: "Product 1",
quantity: 1,
},
{
id: 2,
name: "Product 2",
quantity: 2,
},
],
total: 100,
};
const product = JSON.stringify(updatedContact);
const order = JSON.stringify({
updatedOrder: updatedOrder,
});
const formData = {
id,
product,
order,
};
submit(formData, { method: "post", encType: "multipart/form-data" });
};
действие
export const action: ActionFunction = async ({
request
}: ActionFunctionArgs) => {
const formData = await request.formData();
const {
id,
product,
order,
} = Object.fromEntries(formData) as {
[k: string]: string;
};
console.info({
id,
product: JSON.parse(product),
order: JSON.parse(order),
})
};



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Теперь вы можете использовать JSON напрямую, а не всегда использовать данные формы.
submit({ id, product, order }, { method: 'post', encType: 'appliction/json' })
function action({ request} ) {
const { id, product, order } = await request.json()
//...
}
https://remix.run/docs/en/main/hooks/use-submit#options
Нужно ли мне еще JSON.stringify() когда submit? и JSON.parse() в действиях?
Нет, просто передайте объект в качестве первого аргумента submit
Странный. Почему я получаю эту ошибку? TypeError: Content-Type was not one of "multipart/form-data" or "application/x-www-form-urlencoded". Я использую @remix-run/cloudflare
Какая у вас версия Ремикса? Тип application/json был добавлен в версии 1.18.0 github.com/remix-run/remix/releases/tag/remix%401.18.0
Я использую "@remix-run/cloudflare": "^2.9.1" и @remix-run/react": "^2.9.1". Ошибка возникает в actions, когда я консолью ее записываю.
Хорошо, а как вы анализируете тело запроса? Вы используете request.json() или все еще используете request.formData()?
Я понимаю. Спасибо. То есть вам нужно будет изменить request.formData() только в том случае, если вы решите НЕ использовать application/json?
нет, тебе это не нужно. в любом случае, если хочешь, то можешь это сделать)