Метатеги шлема не перезаписываются в SSR - PullRequest
0 голосов
/ 07 января 2019

Как уже упоминалось в заголовке, метатеги, предоставляемые ssr, не являются динамическими / правильными.

Итак, над этим проектом я работаю, у нас есть метатеги (для целей SEO), которые должны быть динамическими. Я знаю, что современные сканеры также индексируют код на стороне клиента, но для более быстрой индексации, хорошей практики, и поскольку я хотел бы знать, как он работает, я все еще хочу это сделать.

Метатеги шлема обновляются до правильных на стороне клиента, но в ssr отправляемые метатеги являются общими из компонента приложения, а не из вложенных компонентов внутри.

Фрагмент кода с сервера. Jsx

export default function serverRenderer() {
  return async (req, res) => {
    const client = new ApolloClient({
      ssrMode: true,
      link: createHttpLink({
        uri: urljoin(CONFIG.apiURL, 'graphql'),
        credentials: 'same-origin',
        headers: {
          cookie: req.header('Cookie'),
        }
      }),
      cache: new InMemoryCache(),
      fetch: isomorphic,
    })
    const context = {}
    const browserLanguage = 'en'
    const sheet = new ServerStyleSheet()
    const ComponentTree = () => (
      <ApolloProvider client={client}>
        <IntlProvider locale={languageSelected} messages={bob}>
          <StaticRouter location={req.url} context={context}>
            <ThemeProvider theme={theme}>
              <App auth={auth} lang={browserLanguage} />
            </ThemeProvider>
          </StaticRouter>
        </IntlProvider>
      </ApolloProvider>
    )
    try {
      await getDataFromTree(<ComponentTree />)
    } catch (e) {
      console.log(e)
    }
    const initialState = client.extract() // initalState
    const markup = renderToString(sheet.collectStyles(<ComponentTree />))
    const styles = sheet.getStyleTags()
    const helmet = Helmet.renderStatic()
    res.send(Template({ markup, styles, helmet, initialState }))
  }
}

В компоненте приложения есть общие метатеги + заголовок - главный (маршруты / представления) + нижний колонтитул и во вложенных представлениях, которые отображаются так, как я сказал, что метатеги обновляются на стороне клиента, а не на стороне сервера. в то время как из того, что я читал и слышал, когда спрашивал, как код, это должно работать.

Я пытался внедрить асинхронный реактивный шлем, но, похоже, это не помогло мне + из того, что я прочитал в документации, реактивный шлем поддерживает дочерние компоненты, перезаписывая метатеги шлема с тем же именем из родительского компонента. .

Пожалуйста, помогите и хорошего дня!

...