Event handler on a client component is causing an error; maybe related to async functions
Answered
Satin Angora posted this in #help-forum
Satin AngoraOP
I have a 
The error I get isn't clear about the origin or the reason of it
form element,<form
    ...
    onSubmit={handleSubmit}
    method="post"
  >...handleSubmit is an potentially async method with definition:async function handleSubmit(event: FormEvent<HTMLFormElement>) {
    "use server" // I am not sure about converting this to a server action
    event.preventDefault()
    
    const formData = new FormData(event.currentTarget/*.target*/)
    if (isSubmitAsync) await onSubmit(formData)
    else onSubmit(formData)
    ...
  }onSubmit is a prop of parent component with the signatureonSubmit: (formData: FormData) => Promise<void> | voidonSubmit isn't async, and to prevent any unexpected behaviour arising from awaiting a non-Promise value, I came up with this.The error I get isn't clear about the origin or the reason of it
- error node_modules\next\dist\compiled\react-server-dom-webpack\cjs\react-server-dom-webpack-server.edge.development.js (1902:12) @ resolveModelToJSON
- error Error: Event handlers cannot be passed to Client Component props.
  <... name=... submitButtonLabel=... onSubmit={function} afterSubmitChildren=... children=...>
                                               ^^^^^^^^^^
If you need interactivity, consider converting part of this to a Client Component.
    at stringify (<anonymous>)
null
- error node_modules\next\dist\compiled\react-server-dom-webpack\cjs\react-server-dom-webpack-server.edge.development.js (1902:12) @ resolveModelToJSON      
- error Error: Event handlers cannot be passed to Client Component props.
  <... name=... submitButtonLabel=... onSubmit={function} afterSubmitChildren=... children=...>
                                               ^^^^^^^^^^
If you need interactivity, consider converting part of this to a Client Component.
    at stringify (<anonymous>)
digest: "3042938249"
nullAnswered by Satin Angora
I think the issue was either, I was using server actions inside a client component, or, passed down event handler's type was potentially a 
Promise (it's return type was Promise<void> | void). Now it works.5 Replies
Satin AngoraOP
(Continuation of the issue mentioned above^)
I'm getting the error two times, and, for this route, I have three components using this component. This makes me think 
async event handlers are the issue. Here is related components with arguments passed down:async function submitContactRequest(formData: FormData) {
    ...get data from formData and create instance of related model...
    openSubmitProcessDialog()
    await createRequest(
      unrecordedContactReq,
      kContactRequestConverter
    )
    closeSubmitProcessDialog()
  }
  return <RequestForm
        ...
        onSubmit={submitContactRequest}RequestForm component.What may be the issue?
Satin AngoraOP
I think the issue was either, I was using server actions inside a client component, or, passed down event handler's type was potentially a 
Promise (it's return type was Promise<void> | void). Now it works.Answer