Reactjs Redux:多个路由之间的处理状态

Reactjs Redux:多个路由之间的处理状态,reactjs,react-router,redux,Reactjs,React Router,Redux,我必须说,这是一种管理应用程序状态的好方法。但我有几个问题,我似乎在互联网上找不到答案 跨多条路线处理您的状态,这意味着: 我有我的状态,看起来像这样: { user: {}, routing: {} } todos: todo1: name: String completed: boolean ... threads: thread1: participants: [ ... ] messages: [ ... ] ... ev

我必须说,这是一种管理应用程序状态的好方法。但我有几个问题,我似乎在互联网上找不到答案

跨多条路线处理您的状态,这意味着:

我有我的状态,看起来像这样:

{
    user: {},
    routing: {}
}
todos:
  todo1:
    name: String
    completed: boolean
  ...
threads:
  thread1:
    participants: [ ... ]
    messages: [ ... ]
  ...
events:
  event:
    date: Date
    todos: [ 'todo1', 'todo2' ]
  ...
users:
  ...
...
我有几个不同的页面,这意味着它添加了(例如)
todo
,这只在
/todo
路径中起作用。这样的事情怎么处理?或者我甚至不在redux中包含这个。我想我可以为每条路线添加一个对象,但这会很快变得混乱。除非这是建议的路线

我正在寻找这个问题的正确答案。我只是不在Redux中包含这些值,还是只为每个路由创建值,并在执行时嵌套这些值?在这一点上,任何东西都是有帮助的,因为我已经没有什么想法了

谢谢大家


编辑

只是为了回答评论中发生的事情。这就是我所在的州:

{
  "routing": {
    "changeId": 1,
    "path": "/",
    "state": null,
    "replace": false
  },
  "todos": {
    "visibilityFilter": "SHOW_ALL",
    "todos": [
      {
        "text": "Use Redux - This is the initial state.",
        "completed": false,
        "id": 0
      }
    ]
  },
  "requests": {
    "isFetching": false,
    "data": {}
  }
}

几乎直接从redux提取,路由对象来自
react router
,因此这让我相信我真的不需要它。但我只是想弄清楚如何保持事情的整洁,以及如何为一个巨大的应用程序构建我的操作/简化程序。

redux的美妙之处在于简化程序的可组合性。这意味着您可以将各种信息存储在其中,同时完全分开处理。这里有一些过于简单和笼统的建议

  • 在Redux中存储所有应用程序状态。这意味着
    todos
    属性可能存在,但不在需要它的路由上(但可能未填充)

  • 将路由与数据分离。路由是一种将一组视图元素捆绑在一起的方法。这些视图元素可能又有数据需求,但它们独立于它们出现的任何路由(或路由!)。您的商店应具有代表您的业务领域的形状

  • 如果您的应用程序具有各种实体,如待办事项、日历条目和聊天信息,则您的“模型”可能如下所示:

    {
        user: {},
        routing: {}
    }
    
    todos:
      todo1:
        name: String
        completed: boolean
      ...
    threads:
      thread1:
        participants: [ ... ]
        messages: [ ... ]
      ...
    events:
      event:
        date: Date
        todos: [ 'todo1', 'todo2' ]
      ...
    users:
      ...
    ...
    
    我们可能有一个“todos”路线,我们关注todos,但这只是一些领域数据的表示。
    TodoList
    组件需要数据并连接到存储以获取所需的数据。它出现的路由可能会触发请求数据的操作,也可能完全来自其他地方。浏览另一条路线会再次启动该过程,但仅适用于需要的任何数据

  • 在存储中缓存数据。如果用户从路由a单击到路由B,然后再次单击,则可能不需要服务器调用来重新获取所有数据。缓存失效超出了本文的范围

  • redux的美妙之处在于还原剂的可组合性。这意味着您可以将各种信息存储在其中,同时完全分开处理。这里有一些过于简单和笼统的建议

  • 在Redux中存储所有应用程序状态。这意味着
    todos
    属性可能存在,但不在需要它的路由上(但可能未填充)

  • 将路由与数据分离。路由是一种将一组视图元素捆绑在一起的方法。这些视图元素可能又有数据需求,但它们独立于它们出现的任何路由(或路由!)。您的商店应具有代表您的业务领域的形状

  • 如果您的应用程序具有各种实体,如待办事项、日历条目和聊天信息,则您的“模型”可能如下所示:

    {
        user: {},
        routing: {}
    }
    
    todos:
      todo1:
        name: String
        completed: boolean
      ...
    threads:
      thread1:
        participants: [ ... ]
        messages: [ ... ]
      ...
    events:
      event:
        date: Date
        todos: [ 'todo1', 'todo2' ]
      ...
    users:
      ...
    ...
    
    我们可能有一个“todos”路线,我们关注todos,但这只是一些领域数据的表示。
    TodoList
    组件需要数据并连接到存储以获取所需的数据。它出现的路由可能会触发请求数据的操作,也可能完全来自其他地方。浏览另一条路线会再次启动该过程,但仅适用于需要的任何数据

  • 在存储中缓存数据。如果用户从路由a单击到路由B,然后再次单击,则可能不需要服务器调用来重新获取所有数据。缓存失效超出了本文的范围

  • 所以,为了让我头脑清楚,只在商店里保留与业务相关的物品。这是有道理的,是的,缓存失效与此无关,哈哈。但是谢谢你!这更有意义,我只想把它分开。我只是记住了一个可以存储大量数据的应用程序。我说的是有子路由的30多页应用程序,等等。这就是我开始担心的地方……我不完全确定你所说的“业务相关项目”是什么意思,但如果你指的是“不是用户体验的状态”,那么是的(可能偶尔会有例外)。页面的数量或路由的深度与此无关,而是侦听器的数量,无论如何,每次只应限于一条路由。所以我可以帮你,你特别担心什么?代码复杂性、脆弱性、内存或其他什么?啊!我读到Immutable.js在Redux主要用于状态管理的设置中几乎是必需的。我将阅读如何将其集成,我正在开发一个小工具包,当涉及到如何工作以及如何不工作时,我会对它进行一些调整。我了解基本的生命周期以及其他一些东西,但第二次关注这一点肯定会有所帮助。谢谢你,伙计!我来看看。我不同意第3点“在存储中缓存数据”。Redux store表示应用程序的状态,若将其用作缓存,则会将单个组件状态泄漏到全局Redux store,调度操作无论如何不会影响应用程序,它只影响1个组件。如果您在那里添加路由,如果您在正确的路由上,则分派操作只影响一个组件。将redux存储作为缓存存储意味着您的redux存储