代码之家  ›  专栏  ›  技术社区  ›  Yang Yubo

在客户端重新渲染组件时,如何从服务器端渲染访问道具?

  •  1
  • Yang Yubo  · 技术社区  · 8 年前

    我做了很多研究,但没能成功。

    它基于express。js并在同构应用程序中进行反应。

    我使用renderToString()解析我的组件并将其发送回客户端。

    let passedProps = {'foo':'bar'};
    
    const html = ReactDOMServer.renderToString(
                React.createElement(myComponent, passedProps)
        );
    res.send(renderFullPage(html, passedProps));
    

    我必须在客户端重新渲染它,以便激活事件处理程序。

    function renderFullPage(html, passedProps) {
      return `
            <!DOCTYPE html>
            <html lang="en">
              <head>
                ........
              </head>
              <body>
                <div id="root">${html}</div>
              ......
                <script>
                 function render() {
                    ReactDOM.render(
                      React.createElement(
                        myComponent,
                        ${passedProps}
                      ),
                      document.querySelector('#root')
                    );
                 }
                render();
    
                </script>
              </body>
            </html>`;
    }
    

    问题是,我想让客户端呈现与服务器端具有相同的初始属性{'foo':'bar'。但似乎我真的无法在html中传入${passedProps}<脚本(>);标记时,程序将跳过内部代码的执行,因此客户端渲染将无法正常工作。

    有什么方法可以访问中的passedProps吗<脚本(>?

    非常感谢您的任何建议!!

    1 回复  |  直到 8 年前
        1
  •  1
  •   Alex Antonov    8 年前

    在我的真实项目中,我有这样的想法:

    <script>window.__INITIAL_PROPS__ = JSON.stringify(${passed_props})</script>
    

    你拿着这些道具,把它们传给react。客户端的js。 我希望这对你有帮助。