Могу ли я передать переменную в действие сервера, которое используется в форме?
это работает:
//клиентский компонент
<form action = {test}
>
//действие сервера
export const test = async (formData: FormData) => {
console.info(formData);
}
Но это не
//клиентский компонент
const companyID = 1;
return (
<form action = {test(companyID)}
>
...
)
//действие сервера
export const test = async (formData: FormData, companyID) => {
console.info(formData, companyID);
}





Да, у вас есть несколько вариантов.
<form action = {test(companyID)} на <form action = {(event) => test(event, companyID)} — возможно, вам придется проверить там типы, я думаю, что событие будет SubmitEvent или FormEvent, а не FormDataНа самом деле вы вызываете функцию test(companyID) во время рендеринга без каких-либо действий. Вот несколько дополнительных документов по этому вопросу, если вам интересно: https://react.dev/learn/responding-to-events#:~:text=Pitfall
...
const companyID = 1;
async function submitHandler(formData){
console.info(formData, companyID)
const serverResponse = await serverAction(formData, companyID)
//Do something with the server response
}
...
return (
<form action = {submitHandler}>
<input type = "text" placeholder = "Something..."/>
</form>
)
export default Page({params}){
const {companyID} = params;
async function submitHandler(formData){
//Now formData has companyID directly in it.
const serverResponse = await serverAction(formData)
//Do something with the server response
}
return (
<form action = {submitHandler}>
<input type = "text" placeholder = "Something..."/>
<input type = "hidden" value = {companyID} name = "companyID"/>
</form>
)
Я думаю, это шаблон действий сервера по умолчанию. Это определено в документации nextjs. https://nextjs.org/docs/app/building-your-application/data-fetching/server-actions-and-mutations#examples