在服务器端和客户端使用Redux

5
最近,我一直在使用两个redux存储(一个在客户端,一个在服务器端)构建通用的Web应用程序。Redux似乎是管理状态数据的绝佳工具。是否可以将Redux用于React之外的东西?例如,在命令行应用程序中使用Redux是否可行?
我觉得这种客户端存储和服务器存储的方法违反了“唯一数据源规则”,但它感觉很好,并且到目前为止已经运作良好。我发现我可以重复使用约80%的reducer来组合两个存储。服务器上的状态通常是一个集合,而客户端上的状态可以是单个对象。
例如: 假设您有一个聊天应用的客户端状态:
{
    user: 'mike@aol.com',
    room: {
       name: 'sports',
       users: [ ... ],
       messages: [ ... ]
    }
}

服务器状态与之类似,可以使用类似的reducer,但它使用集合而不是对象。

{
    connectedUsers: ['mike@aol.com', ... ],
    rooms: [
      {
          name: 'sports',
          users: [ ... ],
          messages: [ ... ]
      },
      { ... },
      { ... }
    ]
}

创建两个状态树可以重复使用许多相同的reducers。这种方法还使我能够向服务器发送动作并从客户端响应动作。当有新连接时,也不难使用服务器存储来生成状态客户端存储。我对这种通用应用程序的方法很感兴趣。这样做是否违反规则?你可以拥有客户端存储和服务器存储吗?使用服务器存储生成初始状态也不是很困难。还有其他人以这种方式开发通用应用程序吗?
2个回答

0

可能有些晚了,但无论如何,我做了一个实验,在其中实现了一个多浏览器多人井字棋游戏。在后端上,Redux是主要的状态分发器。

这个实验最终成为了一系列文章,以相当详细的方式描述了在后端上使用Redux的方法和原因,无论您喜欢在前端上使用Redux还是经典React状态。

  1. 服务器端Redux. 第一部分. Redux.
  2. 服务器端Redux. 第二部分. 设计.
  3. 服务器端Redux. 第三部分. 代码.

如果您有任何问题,请随时给我发送消息。


0

我认为这种方法的主要问题是服务器上的redux store将会在节点实例上保留在内存中。当您在生产环境中想要从单个服务器实例扩展时,这将是一个问题。

例如,如果您部署到Heroku,当您增加dynos的数量时,您正在增加节点进程的数量。每个节点进程都将有自己的redux状态副本。因此,客户端可能会在第一次请求时获得一个进程,并在下一次请求时获得不同数据的不同进程。


我知道这已经很老了,但如果它在AWS Lambda或Google Cloud Function上运行,你觉得怎么样? - Matthew Chung

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接