Skip to content

Commit 242d7e2

Browse files
committed
Implement Helmet for SSR
1 parent d935411 commit 242d7e2

File tree

4 files changed

+29
-9
lines changed

4 files changed

+29
-9
lines changed

package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@
3737
"@types/react": "^16.9.0",
3838
"@types/react-beautiful-dnd": "^11.0.3",
3939
"@types/react-dom": "^16.9.0",
40+
"@types/react-helmet": "^5.0.15",
4041
"@types/react-helmet-async": "^1.0.3",
4142
"@types/react-outside-click-handler": "^1.3.0",
4243
"@types/react-redux": "^7.1.5",

src/server/Html.tsx

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,14 @@
11
import React from 'react';
22
import { ChunkExtractor } from '@loadable/server';
3+
import { HelmetData } from 'react-helmet';
34

45
export type HtmlProps = {
56
content: string;
67
styledElement: React.ReactNode; // styled-components
78
extractor: ChunkExtractor;
89
apolloState: any;
910
reduxState: any;
11+
helmet: HelmetData;
1012
};
1113

1214
/*
@@ -63,11 +65,15 @@ function Html({
6365
extractor,
6466
apolloState,
6567
reduxState,
68+
helmet,
6669
}: HtmlProps) {
6770
return (
6871
<html>
6972
{/* <head dangerouslySetInnerHTML={{ __html: head }}></head> */}
7073
<head>
74+
{helmet.title.toComponent()}
75+
{helmet.link.toComponent()}
76+
{helmet.meta.toComponent()}
7177
{styledElement}
7278
{extractor.getLinkElements()}
7379
{extractor.getStyleElements()}

src/server/serverRender.tsx

Lines changed: 15 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ import App from '../App';
1717
import Html from './Html';
1818
import { ChunkExtractor, ChunkExtractorManager } from '@loadable/server';
1919
import CacheManager from './CacheManager';
20+
import { HelmetProvider, FilledContext } from 'react-helmet-async';
2021

2122
const statsFile = path.resolve(__dirname, '../build/loadable-stats.json');
2223
const cacheManager = new CacheManager();
@@ -66,17 +67,21 @@ const serverRender = async ({ url, loggedIn, cookie }: SSROption) => {
6667
publicPath: 'https://static.velog.io',
6768
});
6869

70+
const helmetContext = {} as FilledContext;
71+
6972
const Root = (
7073
<ChunkExtractorManager extractor={extractor}>
71-
<StyleSheetManager sheet={sheet.instance}>
72-
<Provider store={store}>
73-
<ApolloProvider client={client}>
74-
<StaticRouter location={url} context={context}>
75-
<App />
76-
</StaticRouter>
77-
</ApolloProvider>
78-
</Provider>
79-
</StyleSheetManager>
74+
<HelmetProvider context={helmetContext}>
75+
<StyleSheetManager sheet={sheet.instance}>
76+
<Provider store={store}>
77+
<ApolloProvider client={client}>
78+
<StaticRouter location={url} context={context}>
79+
<App />
80+
</StaticRouter>
81+
</ApolloProvider>
82+
</Provider>
83+
</StyleSheetManager>
84+
</HelmetProvider>
8085
</ChunkExtractorManager>
8186
);
8287

@@ -97,6 +102,7 @@ const serverRender = async ({ url, loggedIn, cookie }: SSROption) => {
97102
reduxState={store.getState()}
98103
styledElement={styledElement}
99104
extractor={extractor}
105+
helmet={helmetContext.helmet}
100106
/>
101107
);
102108

yarn.lock

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1751,6 +1751,13 @@
17511751
dependencies:
17521752
react-helmet-async "*"
17531753

1754+
"@types/react-helmet@^5.0.15":
1755+
version "5.0.15"
1756+
resolved "https://registry.yarnpkg.com/@types/react-helmet/-/react-helmet-5.0.15.tgz#af0370617307e9f062c6aee0f1f5588224ce646e"
1757+
integrity sha512-CCjqvecDJTXRrHG8aTc2YECcQCl26za/q+NaBRvy/wtm0Uh38koM2dpv2bG1xJV4ckz3t1lm2/5KU6nt2s9BWg==
1758+
dependencies:
1759+
"@types/react" "*"
1760+
17541761
"@types/react-native@*":
17551762
version "0.60.25"
17561763
resolved "https://registry.yarnpkg.com/@types/react-native/-/react-native-0.60.25.tgz#65cb0bf5dd0631079215b63525458e4123c1c90e"

0 commit comments

Comments
 (0)