如果我们看一下todos 示例,假设应用程序有多个视图(一个 TodoList 页面和另一个页面)。
因此,在状态/存储/缓存的顶层,它实际上只是一个具有自己状态的视图,而不是直接引用待办事项数组的“待办事项”。
在该视图中,我们将定义待办事项列表和可见性过滤器 - 所以状态/存储/缓存不会像这样:
{
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,它组合在 data reducer 中,它在 TodoList reducer 中与键“data”组合。TodoList reducer 将再次组合到场景 reducer 等中直到顶部,以使嵌套状态反映项目的文件夹结构。
但是,如果没有在单个“TodoList”解析器中定义所有内容,那么使用 apollo-link-state 和解析器如何实现这样的事情呢?
附加问题:
一旦您离开,您将如何清除 TodoList 状态?在 Redux 中,我猜你会触发一个动作来清除给定的状态片段。
附言
stackoverflow 中缺少“apollo-link-state”和“apollo-link”标签。也许代表> 1500的人可以添加这些?