Javascript 阿波罗客户端的外部状态管理?
我看到很多人在Apollo客户端上使用redux和mobx。但是,在阅读文档后,它提到您可能不需要: 理想情况下,我们希望Apollo缓存成为客户端应用程序中所有数据的唯一真实来源Javascript 阿波罗客户端的外部状态管理?,javascript,apollo,react-apollo,apollo-client,Javascript,Apollo,React Apollo,Apollo Client,我看到很多人在Apollo客户端上使用redux和mobx。但是,在阅读文档后,它提到您可能不需要: 理想情况下,我们希望Apollo缓存成为客户端应用程序中所有数据的唯一真实来源 如何在阿波罗客户端共享全球状态?mobx或redux真的有必要吗?没有mobx或redux是完全没有必要的 足以管理本地应用程序状态,并成为数据的唯一真实来源 import {withClientState} from 'apollo-link-state' import typeDefs from '../sche
如何在阿波罗客户端共享全球状态?mobx或redux真的有必要吗?没有mobx或redux是完全没有必要的 足以管理本地应用程序状态,并成为数据的唯一真实来源
import {withClientState} from 'apollo-link-state'
import typeDefs from '../schema/schema'
import resolvers from '../resolvers'
const initialState = {
intialData: [],
myData: {
__typename: 'MyDataType',
},
}
async function getLocalLinkState(cache) {
const stateLink = withClientState({
cache,
defaults: initialState,
resolvers: resolvers,
typeDefs
})
return stateLink
}
export default getLocalLinkState
基本上,您可以创建与graphql服务器类似的typedefs(非强制)和解析器
因此,您的initialState
将作为全局状态共享,您可以使用客户端查询和客户端转换对其进行读写
这些客户端查询和突变将由客户端解析程序而不是服务器端解析程序解析(如果您使用了@Client)
客户端查询:
const query = gql`
{
counter @client
}
`;
变异解析程序示例
decrementCounter: (_, params, { cache }) => {
const { counter } = cache.readQuery({ query });
const nextCounter = counter - 1;
const data = {
counter: nextCounter,
};
cache.writeData({ data });
return nextCounter;
},
incrementCounter: (_, params, { cache }) => {
const { counter } = cache.readQuery({ query });
const nextCounter = counter + 1;
const data = {
counter: nextCounter,
};
cache.writeData({ data });
return nextCounter;
},
如果使用本地应用程序状态的组件所使用的部分应用程序状态发生任何更改,则将更新这些组件。我的应用程序是分开的,因为我只能访问查询/突变,而不能访问typedefs/还原器。在那种情况下,我怎样才能让它工作?我的“更新”不会向会话添加新的“值”(未在架构中定义)。