Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/417.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在服务器端呈现JS时处理具有本地状态的单例/模块_Javascript_Vue.js_Design Patterns_Server Side Rendering - Fatal编程技术网

Javascript 在服务器端呈现JS时处理具有本地状态的单例/模块

Javascript 在服务器端呈现JS时处理具有本地状态的单例/模块,javascript,vue.js,design-patterns,server-side-rendering,Javascript,Vue.js,Design Patterns,Server Side Rendering,在JS中,所有模块都被缓存(例如,通过节点直接缓存或通过浏览器中的Webpack缓存),因此在默认情况下,它们基本上都是单例的 其中一些有时包含状态,如本例中的模块: //foo.js 设状态=0; 导出函数incrementNumber(){ 状态++; } 导出函数getNumber(){ 返回状态; } 问题在于,当它们用于客户端时,假设该状态仅为特定浏览器选项卡会话的全局状态-一旦页面刷新/离开,该状态即消失。但是,如果您尝试在服务器端呈现一个包含这样模块的JS应用程序,那么有状态的单

在JS中,所有模块都被缓存(例如,通过节点直接缓存或通过浏览器中的Webpack缓存),因此在默认情况下,它们基本上都是单例的

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

//foo.js
设状态=0;
导出函数incrementNumber(){
状态++;
}
导出函数getNumber(){
返回状态;
}
问题在于,当它们用于客户端时,假设该状态仅为特定浏览器选项卡会话的全局状态-一旦页面刷新/离开,该状态即消失。但是,如果您尝试在服务器端呈现一个包含这样模块的JS应用程序,那么有状态的单例将以不同的方式运行,并且状态将在所有用户之间泄漏


考虑到我有一个客户端Vue应用程序,其中有一些类似的模块,我想实现SSR——重构这些模块以使其正常工作的最佳方法是什么?我需要该组件在客户端是一个单例,但我不希望在服务器端的每个单独请求中都有它的虚拟实例。

我在模块单例方面也面临同样的问题。 幸运的是,我们没有那么多。到目前为止,我们正在重构所有这些组件,并试图将基本的单例数据保持在redux状态,或者以某种方式保持在react应用程序上下文中,比如组件内部


祝你好运

对于模块单例,我也面临同样的问题。 幸运的是,我们没有那么多。到目前为止,我们正在重构所有这些组件,并试图将基本的单例数据保持在redux状态,或者以某种方式保持在react应用程序上下文中,比如组件内部


祝你好运

你能告诉我们在哪里以及如何调用这些函数吗(以一种典型的方式)?“我需要组件在客户端是一个单例的”-你真的这样认为吗?是的,你只想在客户端创建一个实例,但这并不需要创建一个单例。你能告诉我们调用这些函数的位置和方式吗(以一种典型的方式)?“我需要组件在客户端是一个单例”-你真的这样做吗?是的,您只需要在客户端创建一个实例,但这并不需要创建一个单实例。