#How to use useState with functions inside

5 messages · Page 1 of 1 (latest)

keen pond
#

Hey, I have been trying to create a composable for a header, which contains all details about the header.

The issue I am facing is, that the useState composable cannot hold functions, otherwise I will get a cannot stringify a function during SSR.

What is the recommended workaround to a composable like this?

interface Header {
  title?: string
  back?: boolean
  secondary?: {
    icon: string
    to?: string
    click?: () => void
  }
  transparent?: boolean
}
export default function () {
  const state = useState<Header>('header', () => ({}))
  const setHeader = (header: Header) => {
    state.value = header
  }

  return { setHeader, header: readonly(state) }
}
hoary wyvern
keen pond
#

of course, try setting click to function and render it on ssr. it will fail, because useState cant hold functions in state

hoary wyvern
#

do you mean like this?

keen pond
#

Like this for example:

setHeader({
  secondary: {
    click: () => navigateTo('/');
  }
})