最近,我一直在使用两个 redux 存储构建通用网络应用程序:一个在客户端上,一个在服务器上。 Redux 似乎是管理状态数据的好工具。可以将 Redux 用于 React 之外的东西吗?例如,您可以在命令行应用程序中使用 Redux 吗?
我觉得这种客户端存储和服务器存储方法打破了“单一真实来源规则”,但感觉非常好,到目前为止效果很好。我发现我可以重用大约 80% 的 reducer 来组成这两个商店。服务器上的状态通常是一个集合,而客户端上的状态可以是单个对象。
例如: 假设您有一个聊天应用程序的客户端状态:
{
user: 'mike@aol.com',
room: {
name: 'sports',
users: [ ... ],
messages: [ ... ]
}
}
server state 类似,可以使用类似的 reducer,但它使用集合而不是对象。
{
connectedUsers: ['mike@aol.com', ... ],
rooms: [
{
name: 'sports',
users: [ ... ],
messages: [ ... ]
},
{ ... },
{ ... }
]
}
创建两个状态树会重用很多相同的 reducer。这种方法还允许我将操作发送到服务器并响应来自客户端的操作。当有新连接时,使用服务器存储生成状态客户端存储也不是很难。
我的问题
我对这种通用应用程序的方法很感兴趣。这是否违反了任何规则?你能有一个客户端商店和一个服务器商店吗?使用服务器存储生成初始值并不是很难。
还有其他人以这种方式使用通用应用程序吗?
最佳答案
使用这种方法时我遇到的主要问题是服务器上的 redux 存储将保留在 Node 实例的内存中。当您投入生产并希望从单个服务器实例扩展时,这将是一个问题。
例如,如果您部署到 Heroku,当您增加测功机的数量时,您会增加 Node 进程的数量。每个 Node 进程都有自己的 redux 状态副本。因此,您的客户可能会在第一个请求时获得一个进程,而在下一个请求时获得具有不同数据的不同进程。
关于node.js - 在服务器和客户端上使用 Redux,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37635560/