在Express / React SSR应用中使用materialize-css

我有一个使用服务器端渲染(SSR)来渲染React应用的Express服务器。

我想将materialize-css软件包与我的react应用程序一起使用。

我已经将materialize-css/dist/css/materialize.min.cssmaterialize-css/dist/js/materialize.min导入了我的App.js。

在我使用express渲染我的应用程序服务器端之前,它工作正常,物化的样式和模式已正确加载。

现在,当我尝试使用express渲染应用程序时,出现以下错误:

[0] ReferenceError: window is not defined
[0]     at Object.<anonymous> (/Users/user/Sites/task_keeper/node_modules/materialize-css/dist/js/materialize.min.js:6:1135)
[0]     at Module._compile (internal/modules/cjs/loader.js:778:30)
[0]     at Object.Module._extensions..js (internal/modules/cjs/loader.js:789:10)
[0]     at Module.load (internal/modules/cjs/loader.js:653:32)
[0]     at tryModuleLoad (internal/modules/cjs/loader.js:593:12)
[0]     at Function.Module._load (internal/modules/cjs/loader.js:585:3)
[0]     at Module.require (internal/modules/cjs/loader.js:692:17)
[0]     at require (internal/modules/cjs/helpers.js:25:18)
[0]     at eval (webpack:///external_%22materialize-css/dist/js/materialize.min%22?:1:18)

这是我的渲染中间件:

const renderMiddleware = () => (req,res) => {
  let html = req.html;
  const htmlContent = ReactDOMServer.renderToString(<App />);
  const htmlReplacements = {
    HTML_CONTENT: htmlContent,};

  Object.keys(htmlReplacements).forEach(key => {
    const value = htmlReplacements[key];
    html = html.replace(
      new RegExp('__' + escapeStringRegexp(key) + '__','g'),value
    );
  });

  res.send(html);
};

然后我在index.js中使用水合物

ReactDOM.hydrate(<App />,document.getElementById('root'));.

在这样的设置中使用materialize-css的正确方法是什么?

x1457007 回答:在Express / React SSR应用中使用materialize-css

您可以通过使用CDN加载脚本来解决此问题,如下所示:

<script src="https://cdnjs.cloudflare.com/ajax/libs/materialize/1.0.0/js/materialize.min.js"></script>

通过这种方式将脚本注入到window变量中,因此您可以使用window.M.AutoInit()

因此,在使用模态的组件中,在useEffect回调中自动将其初始化:

useEffect(() => {
  window.M.AutoInit();
},[]);
本文链接:https://www.f2er.com/3067767.html

大家都在问