Tab*_*dah 5 universal-code node.js express socket.io redux
最近,我一直在使用两个 redux 存储构建通用 Web 应用程序:一个在客户端,一个在服务器上。Redux 似乎是管理状态数据的好工具。可以将 Redux 用于 React 之外的东西吗?例如,您可以在命令行应用程序中使用 Redux 吗?
我觉得这种客户端存储和服务器存储方法打破了“单一事实来源规则”,但感觉很好,到目前为止效果很好。我发现我可以重用大约 80% 的 reducer 来组成两个 store。服务器上的状态通常是一个集合,其中客户端上的状态可以是单个对象。
例如:假设您有一个聊天应用程序的客户端状态:
{
user: 'mike@aol.com',
room: {
name: 'sports',
users: [ ... ],
messages: [ ... ]
}
}
Run Code Online (Sandbox Code Playgroud)
该服务器的状态是类似的,可以使用类似的减速机,但它使用的集合,而不是对象。
{
connectedUsers: ['mike@aol.com', ... ],
rooms: [
{
name: 'sports',
users: [ ... ],
messages: [ ... ]
},
{ ... },
{ ... }
]
}
Run Code Online (Sandbox Code Playgroud)
创建两个状态树重用了许多相同的减速器。这种方法还允许我将动作发送到服务器并响应来自客户端的动作。当有新连接时,使用服务器存储生成状态客户端存储也不是很困难。
我对这种通用应用程序的方法很感兴趣。这是否违反任何规则?您可以拥有一个客户端商店和一个服务器商店吗?使用服务器存储生成初始值并不难。
还有其他人以这种方式使用通用应用程序吗?
小智 0
我使用这种方法遇到的主要问题是服务器上的 redux 存储将保留在节点实例的内存中。当您投入生产并希望从单个服务器实例进行扩展时,这将是一个问题。
例如,如果您部署到 Heroku,当您增加 dyno 的数量时,您也会增加节点进程的数量。每个节点进程都有自己的 redux 状态副本。因此,您的客户端可能会在第一个请求时获得一个进程,并在下一个请求时获得具有不同数据的不同进程。
| 归档时间: |
|
| 查看次数: |
1455 次 |
| 最近记录: |