微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

React @loadable/component - 在服务器端以块的形式调用静态函数

如何解决React @loadable/component - 在服务器端以块的形式调用静态函数

我使用@loadable/component 和@loadable/server 来基于Route 拆分块,它适用于服务器端和客户端。

我有一个函数 fetchInitialData 附加到页面中的每个组件,可以调用它来获取响应,然后返回的响应可以通过上下文传递给组件。

分割块的代码

const LoadableComponent = loadable(props => import(`src/pages/${props.componentName}`))

首页组件中的fetchInitialData:

// src/pages/Home.js

const Home = (props) => {}

Home.fetchInitialData = () => {
    fetch('/api')
      .then(response => response.json())
      .then(data => data)
}

export default Home
export { Home }

我想在服务器端调用 fetchInitialData 方法,以便可以更早地获取每个页面的响应并在上下文中传递。

app.get("/*",(req,res) => {
    // fetchInitialData needs to be called here based on route. Something like
    // const LoadableComponent = loadable(props => import(`src/pages/${pageName}`))
    // const initialData = LoadableComponent.fetchInitialData()

    const nodeExtractor = new ChunkExtractor({ statsFile: nodeStats })
    const { default: App } = nodeExtractor.requireEntrypoint()

    const webExtractor = new ChunkExtractor({ statsFile: webStats })
    const jsx = webExtractor.collectChunks(
        <App location={req.url} context={initialData} />
    )
    
    const html = `
        <html>
            <head>
                ${webExtractor.getScriptTags()}
            </head>
            <body>
                <div id="app-root">
                    ${ReactDOMServer.renderToString(jsx)}
                </div>
            </body>
        </html>
    `

    res.set('content-type','text/html')
    res.send(html)
        
})

完整代码可以在github上找到 https://github.com/Vivekanand16/ssr

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。