如果我们看看
todos example
,假设应用程序有多个视图(一个TodoList页面和另一个页面)。
因此,在状态/存储/缓存的顶层,它实际上只是一个具有自己一些状态的视图,而不是“todo”直接引用todo项数组。
在该视图中,我们将定义待办事项列表和可见性过滤器,这样状态/存储/缓存就不会是这样了:
{
todos: [TodoItem]
0:â¾TodoItem:0
completed: false
id: 0
text: "hh"
visibilityFilter: "SHOW_ALL"
}
但作为:
{
scenes: {
TodoList: {
todos: [TodoItem]
0:â¾TodoItem:0
completed: false
id: 0
text: "hh"
visibilityFilter: "SHOW_ALL"
},
SomeOtherView: { /* other state */}
}
}
它甚至可能被隔离在自己的数据“模块”中,如下所述:
https://medium.com/@alexmngn/how-to-use-redux-on-highly-scalable-javascript-applications-4e4b8cb5ef38
:
{
scenes: {
TodoList: {
data: {
todos: [TodoItem]
0:â¾TodoItem:0
completed: false
id: 0
text: "hh"
}
visibilityFilter: "SHOW_ALL"
},
SomeOtherView: { /* other state */}
}
}
应用程序范围的状态将是存储级别更远:
{
// App global state lives as long as the app
data: { /* App global relevant data */},
someglobalstate: true,
scenes: {
TodoList: { // "view state" lives as long as the view is active, and resets when navigated away from
data: {
todos: [TodoItem]
0:â¾TodoItem:0
completed: false
id: 0
text: "migrate from redux to apollo-link-state"
}
visibilityFilter: "SHOW_ALL"
},
SomeOtherView: { /* other state */}
}
}
我们可以通过Redux中的reducer组合轻松实现这一点,如下所示:
从内部开始:todos将有自己的reducer,它与数据reducer结合在一起,数据reducer与键“data”结合在一起。然后,TodoList reducer将再次组合到scenes reducer中,依此类推到顶部,以使嵌套状态反映项目的文件夹结构。
但是,如果不在一个“TodoList”解析器中定义所有内容,阿波罗链接状态和解析器怎么可能出现这种情况呢?
其他问题:
一旦离开,你将如何清除TodoList状态?在Redux中,我想您会触发一个操作,该操作将清除状态的给定部分。
附笔。
“阿波罗链接状态”
&
“阿波罗链接”
stackoverflow中缺少标记。可能是具有rep>1500能加上这些吗?