diff --git a/front/apps/web/src/pages/_app.tsx b/front/apps/web/src/pages/_app.tsx index 859bd67d..774d75a9 100755 --- a/front/apps/web/src/pages/_app.tsx +++ b/front/apps/web/src/pages/_app.tsx @@ -159,16 +159,17 @@ App.getInitialProps = async (ctx: AppContext) => { ? Component.getLayout.Layout.getFetchUrls : Component.getLayout?.getFetchUrls; + const items = arrayShuffle(Component.randomItems ?? []); + appProps.pageProps.randomItems = { + [Component.displayName!]: items, + }; const urls: QueryIdentifier[] = [ - ...(getUrl ? getUrl(ctx.router.query as any) : []), - ...(getLayoutUrl ? getLayoutUrl(ctx.router.query as any) : []), + ...(getUrl ? getUrl(ctx.router.query as any, items) : []), + ...(getLayoutUrl ? getLayoutUrl(ctx.router.query as any, items) : []), ]; const [authToken, token] = await getTokenWJ(ctx.ctx.req?.headers.cookie); appProps.pageProps.queryState = await fetchQuery(urls, authToken); appProps.pageProps.token = token; - appProps.pageProps.randomItems = { - [Component.displayName!]: arrayShuffle(Component.randomItems ?? []), - }; return { pageProps: superjson.serialize(appProps.pageProps) }; }; diff --git a/front/packages/models/src/query.tsx b/front/packages/models/src/query.tsx index 077edb9e..376bfd08 100644 --- a/front/packages/models/src/query.tsx +++ b/front/packages/models/src/query.tsx @@ -165,7 +165,7 @@ export type QueryIdentifier = { export type QueryPage = ComponentType< Props & { randomItems: Items[] } > & { - getFetchUrls?: (route: { [key: string]: string }) => QueryIdentifier[]; + getFetchUrls?: (route: { [key: string]: string }, randomItems: Items[]) => QueryIdentifier[]; getLayout?: | QueryPage<{ page: ReactElement }> | { Layout: QueryPage<{ page: ReactElement }>; props: object }; diff --git a/front/packages/ui/src/home/index.tsx b/front/packages/ui/src/home/index.tsx index 88f9c8eb..afc5d55f 100644 --- a/front/packages/ui/src/home/index.tsx +++ b/front/packages/ui/src/home/index.tsx @@ -27,8 +27,12 @@ import { GenreGrid } from "./genre"; import { Recommanded } from "./recommanded"; import { VerticalRecommanded } from "./vertical"; import { NewsList } from "./news"; +import { useLayoutEffect, useState } from "react"; export const HomePage: QueryPage<{}, Genre> = ({ randomItems }) => { + const [isClient, setClient] = useState(false); + useLayoutEffect(() => setClient(true), []); + return ( @@ -57,11 +61,7 @@ export const HomePage: QueryPage<{}, Genre> = ({ randomItems }) => { ))} - {randomItems - .filter((_, i) => i >= 6) - .map((x) => ( - - ))} + {isClient && randomItems.filter((_, i) => i >= 6).map((x) => )} ); }; @@ -70,10 +70,10 @@ HomePage.randomItems = [...Object.values(Genre)]; HomePage.getLayout = { Layout: DefaultLayout, props: { transparent: true } }; -HomePage.getFetchUrls = () => [ +HomePage.getFetchUrls = (_, randomItems) => [ Header.query(), NewsList.query(), - ...Object.values(Genre).map((x) => GenreGrid.query(x)), + ...randomItems.filter((_, i) => i < 6).map((x) => GenreGrid.query(x)), Recommanded.query(), VerticalRecommanded.query(), ];