SSR с Helmet также отображает асинхронные мета и контент?

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

И нет возможности показать этот контент в компоненте Helmet. Содержание всегда empty

Компонент Helmet - это компонент HtmlPage. В приведенном ниже коде мы получаем ошибку SEO undefined.

https://github.com/nfl/react-helmet/issues/409

<HtmlPage
    {...this.props.client.info.SEO}
>

    <ThemeProvider theme={this.state.theme}>
        <div className='wrapper' id='wrapper'>

            {loading && <Loading 
                client={this.state.client}
            />}

            <div className="content" id='page-wrapper'>
                <h1>Its ok for now ====</h1>

                <p>
                    {JSON.stringify(this.props.client)}
                </p>

                <div>
                    {!!this.props.client.info &&
                        <p>{JSON.stringify(this.props.client.info.SEO)}</p>} 
                </div>
            </div>
        </div>
    </ThemeProvider>
</HtmlPage>

react-helmet-async не работают.

https://github.com/staylor/react-helmet-async


person Francis Rodrigues    schedule 11.10.2018    source источник


Ответы (1)


Вам нужно реализовать второй renderPass, чтобы он мог собирать элементы заголовка. Я пробовал react-tree-walker для этого, но это не сработало. В конце я добавил второй renderPass, используя renderToStaticMarkup. Например. `

const stream = renderToNodeStream(<App preloadedState={preloadedState} />);

// extra render pass
renderPass(<App preloadedState={preloadedState} />);

`

person Marc    schedule 22.01.2019