在服务器端渲染JS

时间:2020-09-03 08:48:13

标签: javascript vue.js design-patterns server-side-rendering

在JS中,所有模块都被缓存(例如,直接由Node缓存或由浏览器中的Webpack缓存),因此从本质上讲,默认情况下它们都是单例。

其中有些有时包含状态,例如本例中的模块:

// foo.js

let state = 0;

export function incrementNumber() {
  state++;
}

export function getNumber() {
  return state;
}

这些问题是,当为客户端创建它们时,假定状态仅对于特定的浏览器选项卡会话是全局的-刷新/离开页面后,状态就消失了。但是,如果尝试在服务器端呈现具有此类模块的JS App,则有状态的单例行为将有所不同,状态将在所有用户之间泄漏。

考虑到我有一个客户端Vue应用程序,该应用程序具有这样的模块,并且我想实现SSR-重构此类模块以使其正常工作的最佳方法是什么?我需要在客户端将组件设置为单例,但我不希望在服务器端为每个单独的请求提供单独的实例。

1 个答案:

答案 0 :(得分:0)

我在模块单例方面面临着同样的问题。 幸运的是,我们没有那么多。到目前为止,我们正在重构所有这些元素,并尝试将必要的单例数据保持在redux状态或以某种方式在诸如组件内部之类的react app上下文内部。

祝你好运!