Closed JakeCooper closed 4 years ago
This check is necessary as we do not serialize props on the server for performance reasons. So, this check only runs in development and has you make things serializable with scalar types, meaning they'll match exact on the client.
I'm having this issue when fetching data from Contentful on posts that have links to each other.
Stringifying using safe-json-stringify
and reparsing fixes, but I'm hoping there is a more performant solution.
import safeJsonStringify from 'safe-json-stringify';
...
export async function getServerSideProps({ params, preview = false }) {
const rawData = await getSlugPageProps(params.slug, 'product-page', preview);
const stringifiedData = safeJsonStringify(rawData);
const data = JSON.parse(stringifiedData);
return {
props: {
data
}
};
}
I stumbled across the same problem and got it working with by using the superjson-next
plugin.
See more here: https://github.com/blitz-js/superjson#using-with-nextjs
@icflorescu I installed both packages and the .babelrc file and still getting the error. Do you have any tips on how you got it to work?
import superjson from 'superjson';
//this runs in build time. don't put code here that you expect to run in browser
export const getServerSideProps = async () => {
try {
const data = await getTips()
data.createdAt = await superjson.parse(data?.createdAt)
data.updatedAt = await superjson.parse(data?.updatedAt)
return {
props: { data },
}
} catch (error) {
console.error(error);
throw error;
}
}
I find it very strange that we have to do this when simply reading in a Date object. I guess there is a good reason?
You can do it in one line like this:
let data = JSON.parse(safeJsonStringify(doc.data()))
This issue has been automatically locked due to no recent activity. If you are running into a similar issue, please create a new issue with the steps to reproduce. Thank you.
Bug report
Describe the bug
When passing a date over the getServerSideProps boundary, it fails to serialize the Date object. Dates are serializable, so they should be allowed through.
To Reproduce
Attempt to pass a date time through the API, like so
page/index.tsx
Expected behavior
Serializing occurs just fine
Screenshots
See Stack Trace
System information
Additional context
While crude, to not have to write complex logic to determine serializability, you could replace the offending method with
Stack Trade: